函数和操作符
双等号与三等号
==操作符比较时会进行类型的强制转换,即可以比较两个不同类型的对象,在执行比较前会尝试将两个对象转换成同一类型,如下:
"1" == 1; //true
这样会误以为造成误导,上面的例子,我们可以先将字符串转换成数字型,然后用对类型敏感的三重等号(===)来进行比较,如下:
Number("1") === 1; //true
由于双等号具有强制类型转换的行为,所以会打破一般的传递性规则,如下比较:
"" == 0; //true -空字符串会被强制转换为数字0
0 == "0"; //true -数字0会被强制转换为字符串"0"
"" == "0"; //false -两操作数都是字符串,所以不会强制转换
如果使用三重等号,上面的三个比较全部返回 false
null 与 undefined
null 和 undefined 的值相等,但类型不同
typeof undefined // undefined
typeof null // object
null === undefined // false
null == undefined // true
parseInt第二参数
如果忽略 parseInt 的第二个参数,那么数字的基数将有下面的规则决定:
默认基数为10,即按10进制解析;
如果数字以0x开头,那么基数为16,即按16进制解析;
如果数字以0开头,那么基数为8,即按8进制解析。
常见问题,如果我们让用户输入以0开头的数字,这时候就会按8进制的方式解析,这样我们就会看到如下效果:
parseInt("8"); //8
parseInt("08"); //0
因此我们通常会指定 parseInt 的第二参数,如下:
parseInt("8", 10); //8
parseInt("08", 10); //8