当前位置: 代码迷 >> Web前端 >> 犀牛书札记:(7)Expressions and Operators
  详细解决方案

犀牛书札记:(7)Expressions and Operators

热度:216   发布时间:2012-09-04 14:19:30.0
犀牛书笔记:(7)Expressions and Operators

加号:

如果一个操作数是字符串,加号的另一个操作数将被转换成字符串。对于数字或字符串的转换,调用valueOf()/toString()方法

?

减号

如果是非数字操作数,将试图将其转换成数字

?

乘号

如果是非数字操作数,将试图将其转换成数字

?

除号

如果是非数字操作数,将试图将其转换成数字。JS的除法是浮点的,和JAVA不同

?

取模(%)

如果是非数字操作数,将试图将其转换成数字

?

Equality(==) and Identity(===)

===相比==,检查更严格

===来自于ECMAScript v3/JavaScript 1.3之后。

?

在进行值比较的情况下,==和===的行为是一致的,即比较两个值是否是一样的

?

?

?

===比较的规则如下

1. 如果两个值属于不同的类型,不相等(not identical)

2. 如果两个值都是number,并且拥有相同的值,那么是相等的。除非两个值都是NaN.

?

alert( NaN===NaN);//返回false
?

? ? NaN从不和任何值相等。要检验一个值是否是NaN,使用isNaN()函数

?

3. 如果两个值都是string,并且包含同样的字符序列,是identical。

4. 如果两个值都是boolean,这个简单

5. 如果两个引用指向同一对象,相等。否则不等

6. 如果两个引用都为null或者undefined,相等。

?

==笔记爱哦的规则如下:

1. 如果两个值有相同类型,测试identity, 如果identical,就相等(equal)。否则不等

?

2. 如果两个值类型不同,仍有可能相等。

如果一个值为null,另一个值为undefined,相等。

var a = null;

var b;
alert( a == b);//返回true
?

?? 如果一个值为number,另一个为string,将string转换成数字,再比较。

var a = 3;

var b = "3";
alert( a == b);//true

? 如果两个值都为true,转换成1,再比较,如果两个值是false,转换成0再比较。

?

如果两个值中一个是对象,另一个是number/string, 将对象转换成元数据后再比较。除了Date()对象外,对象转换成元对象的顺序是先valueOf()后toString().Date()直接使用toString()

其他任何比较都是不相等的

?

?

大于小于比较:

如果一个操作数是或者被转换成string,另一个操作数是或者转换成number,将被转换成number进行比较。

如果一个操作数既可以转换成number又可以转换成string,JS进行numerical转换。

如果某个操作数转换不成功,返回false.

?

In 操作符

左边操作数是字符串或者可以被转换成字符串,右边操作数是对象

如果左边的值是右边对象的一个属性,那么返回true,否则返回false.

?

var a = {x:3,y:4};
alert( "x" in a);//true
?

instanceof操作符

左边操作数是一个对象,右边操作数是一个对象的类名

如果左边操作数是右边的一个实例,返回true。

在JS中,CLASS名是由构造该对象的构造函数名字来表示的。

?

&&

JS也有短路

?

typeof操作符

typeof xxxx 或 typeof(xxx)

对于所有对象都只返回object,所以只能用于区分对象和非对象

?

new操作符

new操作符,创建一个新的对象,并调用后面的构造函数对它进行初始化。

Constructor must be an expression that evaluates to a constructor function

当构造器没有参数时,后面的括号可以省略:

var a = new Object;

?

new操作先创建一个新的对象,该对象没有任何属性。然后调用指定的构造函数,构造函数通过this关键字引用到刚创建的对象,然后对其进行初始化

?

delete操作符

delete操作符用于删除函数属性,数组元素或者变量。如果删除成功,则返回true.

不是所有的变量和属性都可以删除的,一些build-in core和client-side属性不能删除。

?

void操作符

忽略操作数的值,并返回undefined。常见用法是:

?

<a href="javascript:void window.open();">Open New Window</a>

?

[]操作符

可以和.一样访问对象属性

当对象是associative array时,.操作符将不能访问其属性,只有使用[]操作符

?

?

?

?

?

?

?

?

  相关解决方案