一:null,undefined
	null是关键字
	null含义是“非对象",常用来描述“空值”
	type of null;                 =>   object
	它可以表示 数字,字符串,对象是“无值”的
	
	undefined是预定义的全局变量,它的值就是“未定义”。(与null不一样,它不是关键字)
	undefine 表明更深层次的“空值”。表明变量没有初始化。
	typeof undefined;       => undefined
	如果查询对象属性或数组元素的值返回 undefined ,说明这个属性或元素不存在
	如果函数没有任何返回值,则返回undefined
	引用没有提供实参的函数形参的值,也会得到 undefined
	
	null与undefined 都不存在任务属性和方法
	null == undefined;           =>true
	null === undefined;         =>false
	null == false;                   => false 注意 null 与 false不等,但在希望是布尔值的地方,null是假值
	null ? 1 : 0;                      =>0
	undefined == false;         =>false 注意 undefined 与 false不等,但在希望是布尔值的地方,undefined是假值
	undefined ? 1: 0;             =>0
二:运算符 typeof
	typeof是一元运算符,放在其它单个操作数的前面,操作数可以是任意类型。返回值为表示操作数类型的一个字符串
		typeof undefined;                  => undefined
		typeof null;                            =>object
		typeof true或false;                =>boolean
		typeof 任意数字或NaN;         =>number
		typeof 任意字符串;                =>string
		typeof 任意函数;                    =>function
		typeof 任意内置对象(非函数);         =>object
		typeof 任意宿主对象;            =>由编译器各自实现的字符串,但不是“undefined”,“boolean”,“string”,或"number"
	常这样用:
	(typeof value == 'string')...
	typeof运算符还可以带括号,看起来更像是函数
	typeof (i)
三:运算符instanceof
	instanceof 运算符希望左边操作数是一个对象,右边操作数是一个对象的类。如果左边的对象是右边类的实例,则返回true,否则返回false
	需要注意:所有对象都是 Object 实例。
	计算过程:计算 o instanceof f,会首先计算 f.prototype,然后中在原型链中查找 f,如果找到,那么o 是f的实例。表达式返回true。
	原型链。。
四:运算符==和===
	javascript对象的比较是引用的比较,而不是值的比较。对象和其本身相等,和其它任何对象都不相等。
	=== 是严格相等运算符,它首先计算两个操作数的值,然后比较两个值。比较过程中没有任何类型转换
- 	如果两个值类型不同,则它们不相等
 - 	如果两个值,一个是null,一个是undefined,则它们不相等
 - 	null===null;                           =>true
 - 	undefined === undefined;     =>true
 - 	null === undefined;               =>false
 - 	如果其中一个值是 NaN,或者两个都是NaN,则它们不等。(NaN与其它任务值都是不等的,包括它本身,通过 x !==x 可以判断x 是否为NaN)
 - 	如果两个值为数字且数值相等,则它们相等。同时 0===-0返回true
 - 	如果两个值都是字符串,且所含的对应位上的16位数完全相等,则它们相等。如果它们的长度和内容不同,则它们不等
 - 	如果两个引用指向同一个对象,数组或函数,则它们相等。如果指向不同的对象,尽管它们的属性完全一样,也是不相等的
 
	==是相等运算符,但比较并不严格。如果两个操作数不是同一类型,则会尝试一些类型转换,然后比较.
- 		如果两个操作数的类型相同,则与 ===的比较规则一样
 - 		如果两个操作数的类型不同,也可能认为它们相等,类型转换规则如下
 - 		如果一个值为null另一个为undefined,则它们相等
 - 		如果一个值为数字,另一个为字符串,先将字符串转换为数字,然后再用转换后的值比较
 - 		如果其中一个值是true,则将其转换为1再进行比较。如果是false,则转换成0
 - 		如果一个值是对象,另一个值为数字或字符串,则将对象转换成原始值后再比较
 - 		其它不同类型间的比较均不相等
 
	例:“1” == true;
	先将true 转为 1,然后再将 “1”转为 1,比较结果为 true
五:运算符in
	in 运算符希望它的左操作数是一个字符串,或者可以转换成字符串。右操作数是一个对象。如果右侧的对象拥有一个名为左侧操作数值的属性名,则返回true
六:运算符 eval()
	eval()只有一个参数,如果传入的不是字符串,则直接返回这个参数。如果是字符串,则将其作为javascript代码进行编译。如果编译失败,则抛出一个语法错误异常。如果编译成功,则开始执行这段代码。并返回字符串中的最后一个表达式或语句的值。如果最后一句没有值,则返回undefined。
	eval()使用了调用它的作用域环境。
	因此:
	var x = 1;
	eval('x');     => 1
	eval('var y=3;');
	y;             =>3
	ECMAscript 3标准规定不允许给eval()赋与别名。如果通过别名来调用的话,将会抛出一个异常。