JavaScript小细节

来源:互联网 发布:淘宝哪个店卖高仿aj好 编辑:程序博客网 时间:2024/06/05 06:50

函数和操作符

双等号与三等号

==操作符比较时会进行类型的强制转换,即可以比较两个不同类型的对象,在执行比较前会尝试将两个对象转换成同一类型,如下:

"1" == 1;  //true
这样会误以为造成误导,上面的例子,我们可以先将字符串转换成数字型,然后用对类型敏感的三重等号(===)来进行比较,如下:

Number("1") === 1;  //true
由于双等号具有强制类型转换的行为,所以会打破一般的传递性规则,如下比较:

"" == 0;  //true  -空字符串会被强制转换为数字00 == "0";  //true  -数字0会被强制转换为字符串"0""" == "0";  //false  -两操作数都是字符串,所以不会强制转换
如果使用三重等号,上面的三个比较全部返回 false

parseInt第二参数

如果忽略 parseInt 的第二个参数,那么数字的基数将有下面的规则决定:
默认基数为10,即按10进制解析;
如果数字以0x开头,那么基数为16,即按16进制解析;
如果数字以0开头,那么基数为8,即按8进制解析。
常见问题,如果我们让用户输入以0开头的数字,这时候就会按8进制的方式解析,这样我们就会看到如下效果:
parseInt("8");  //8parseInt("08");  //0
因此我们通常会指定 parseInt 的第二参数,如下:
parseInt("8", 10);   //8parseInt("08", 10);   //8