js指南笔记
原创:http://www.blogjava.net/weiwei/articles/401631.html
一: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()赋与别名。如果通过别名来调用的话,将会抛出一个异常。