首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有趣的 JS 隐式转换

有趣的 JS 隐式转换

JavaScript 作为一门弱类型语言,它的数据类型是非常的弱的!

在使用算术运算符时,运算符两边的数据类型可以是任意的值,比如一个字符串可以和数字相加。之所以不同的数据类型之间可以做运算,是因为 JavaScript 引擎在运算之前会悄悄的把它们进行隐式类型的转换。

数值类型和布尔类型的相加

2 + true;

输出:3

结果就变成数值类型,如果在一些强类型语言中,那就会出现报错。在 JS 中,如果字符串和数字相加都不会报错,而是自动的进行相应的类型转换。

像 “+”、“-”、“*”、“/” 。但是 “+” 有所不同,有时候是算数运算符,有时候是字符串连接符号,要看具体的情况。

如果字符串和数字相加,JavaScript 会自动把数字转换成字符,不管数字在前还是字符串在前面。

"1" + 2;

输出:"12"

2 + "1";

输出:"21"

字符串和数字相加结果是字符串

字符串和数字相加结果是字符串

字符串和数字相加结果是字符串

重要的事情说三遍!!!

上面我们说的是两项相加,那如果是三项呢?

1 + 2 + "3";

输出:"33"

这边我们就要遵循从左往右的运算规律了,上面的式子等价于:

(1 + 2) + "3";

输出:"33"

但要注意它与

1 + "2" + 3;

输出:"123"

是不一样的!!!

隐式类型转换,有时候会隐藏一些错误,比如 null 会转换成 0,undefined 会转换成 NaN。需要注意的是 NaN 和 NaN 是不相等的,如下:

var x = NaN;

x === NaN;

输出:false

虽然 JavaScript 提供了 isNaN 来检测某个值是否为 NaN,但是这也不太精确,因为在调用 isNaN 函数之前,本身就存在了一个隐式转换的过程,它会把那些原本不是 NaN 的值转换成 NaN,如下:

isNaN("foo");

输出:true

isNaN(undefined);

输出:true

isNaN({});

输出:true

isNaN({ valueOf: "foo" });

输出:true

上面代码,我们使用 isNaN 来测试后,发现字符串、undefined,甚至对象,结果都返回真,但是我们总不能说它们也是 NaN 吧,总而言之得出的结论是:isNaN 检测 NaN 并不可靠!

关注文教Crazy,持续更新,敬请期待!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180611G1CD8H00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券