var v1 = ('' == '0'); //false
var v2 = (0 == ''); //true
var v3 = (0 == '0'); //true
var v4 = (false == 'false'); //false
var v5 = (false == '0'); //true
var v6 = (false == undefined); //false
var v7 = (false == null); //false
var v8 = (null == undefined); //true
var v9 = ('\t\r\n' == 0); //true
var v10 = (false == 0); //true
var v11 = (typeof null == 'object'); //true
var v12 = (typeof NaN == 'number'); //true
var v2 = (0 == ''); //true
var v3 = (0 == '0'); //true
var v4 = (false == 'false'); //false
var v5 = (false == '0'); //true
var v6 = (false == undefined); //false
var v7 = (false == null); //false
var v8 = (null == undefined); //true
var v9 = ('\t\r\n' == 0); //true
var v10 = (false == 0); //true
var v11 = (typeof null == 'object'); //true
var v12 = (typeof NaN == 'number'); //true
我昨天晚上还在整理些JS陷阱资料呢。 变量相等性的时候
/*
*Boolean类型转换成1或0。即数字型的
*字符串与数字比较,字符串先转换为数字(哪怕是NaN)
*对象与字符串比较,对象执行toString()
*对象与数字比较,对象尝试转换为数字
*/
var v1 = ('' === '0'); //false
var v2 = (0 === ''); //false
var v3 = (0 === '0'); //false
var v4 = (false === 'false'); //false
var v5 = (false === '0'); //false
var v6 = (false === undefined); //false
var v7 = (false === null); //false
var v8 = (null === undefined); //false
var v9 = ('\t\r\n' === 0); //false
var v10 = (false === 0); //false
var v11 = (typeof null === 'object'); //true
var v12 = (typeof NaN === 'number'); //true
“有些其实不是bug,是因为你使用==,导致两边的数据进行类型强制转换,才会出现某些bug,所以建议比较的时候使用===进行比较,这样不会进行数据的强制转换,一下是我重新进行的测试:”
var v2 = (0 == ''); //true,正确呀,空串会转成0与0比较呀。
var v3 = (0 == '0'); //true 正确呀,空串会转成0与0比较呀。
var v4 = (false == 'false'); //false,正确呀,字符串 false 转成boolean型后,就是 true 呀
var v5 = (false == '0'); //true,对呀,'0'和'' 转成布尔型后都是false
var v6 = (false == undefined); //false,对呀,未定义,无所谓真假
var v7 = (false == null); //false,空,也无所谓真假呀。
var v8 = (null == undefined); //true,对呀,这是规定
var v9 = ('\t\r\n' == 0); //true,对呀,空白字符转数字后就是0,再与0比
var v10 = (false == 0); //true,对呀,
var v11 = (typeof null == 'object'); //true,对呀,null是一个object占位符
var v12 = (typeof NaN == 'number'); //true,NaN本来就是数字型,但是是一个不存在的数
null为空,你var个变量不赋值就是一个{},同时也是undefined。
false编译器预编译就是为0,