JavaScript中的等价操作符

发表于 & 归档在 JavaScript, Web.

JavaScript中存在两种等价操作符:相等”==”和全等”===”,前者对不同类型(比如String与Object)也可作等价判断,后者则必须要求类型相同,此外JavaScript中的任何对象都可以判断是非,也就是转换成boolean基本类型,这些都是ECMAScript语言(包括JavaScript)的基础 JavaScript中的四种基本类型 number, string, boolean, object 等价判断首先会判断对象类型,对于全等操作符,类型不一时,直接返回false,而对于相等”==”操作符则会按特定的规则,转换成number, string, boolean这三种基本类型,而后做判断 相同类型间比较 全等操作符(strict equality operator) “===” 如果类型不一致,返回false number,如果相同值,返回true,NaN不等于任何值,包括他自己,NaN可通过全局方法,isNaN(…)判断 string,相同字符序列的返回true,有一种情况,相同的字符串使用Unicode标准可能有不同的编码方式,但遗憾的是,javascript只通过基本的字符比较,所有的字符串在比较之前,会先转换成“正常格式”。参考”String.localeCompare()”提供另一种比较字符串的方式 boolean,同为true或false,返回true 相同引用表示是同一个对象 如果两者都是null或者undefined,表示他们相同 这里需要注意一点,NaN是个怪物,它不等于任何对象,甚至不等于自己: [javascript]NaN !== 0; NaN !== NaN; NaN != 0; NaN != NaN;[/javascript] 相等操作符(Equality operator)”==” 相同类型之间的比较,有的人说等同于”===”,准确的说要除去null 和 undefined外,因为null == undefined ,但 null !== undefined ,余下的按全等的规则 [javascript]null == undefined[/javascript] 不同类型间比较 相等操作符(Equality operator)”==” javascript有四种类型对象,number, string, boolean, object,除去相同类型的比较外,不同类型之间会先通过类型转换,然后对二者比较,按排列组合存在六种情况:… Read more »

javascript中的比较操作符与类型转换

发表于 & 归档在 Web.

JavaScript中的比较操作符Equality(==)和Identity(===),以及类型间的转换是让人头疼的问题,虽然很多情况下都不需要,但多了解些,备特殊之需:

一道有名的javascript题目,其中有一处判断语句如下:

[javascript]alert([] == ![])[/javascript]

简单解答

1、”![]”结果是什么?

[]转换成boolean,按ToBoolean规则,object转换成boolean,返回true,然后取反,所以“![]”的结果是false

2、”[] == ![]”结果是什么?

看等号的左右两边,一个类型是object,一个是boolean,按不同类型对象间比较的规则:

[]” 转化成number ,结果是0

false,转换成number,结果是0

所以[] == ![] 结果为true,问题的关键是object和boolean比较,先转换成number(ToNumber())然后比较。

3、”[] == ![]”始终为真吗?

答案是否定,上面的结论是默认的情况,如果重写Array.prototype.valueOf方法,定制array转换成 number的过程,可以得到不同的结果,如:

[javascript]
Array.prototype.valueOf = function(){
return 1;
}
//结果是false
alert([] == ![]);
[/javascript]