基础运算划定规矩
+
的运用有两种状况
当+
衔接两个变量或值时即为二元运算符,比方a + b
,当+
在变量或值前面时,则为一元运算符,比方+'12.1'
一元运算符
直接转换为Number范例,相当于Number()
经常使用的另有!
运算符,用来转为Boolean范例
二元运算符
加法,能够以为只要两种状况
1、数字 + 数字
2、字符串 + 字符串
其他范例的值相加终究都邑隐式转换为上述两种范例相加。
JS中的基础数据范例(primitives)有6种,
String、Number、Boolean、undefined、null、Symbol
援用数据范例则是指除了上述基础数据范例之外的一切值,比方Array、Function
隐式范例转换
加法的隐式转换:
1、转换为原始值
当须要转换为原始值时,JS引擎内部会举行笼统操纵ToPrimitive()
。
ToPrimitive(input,PreferredType?)
// 假如为原始值则直接返回
// 假如为援用数据范例则
// 1、先尝试挪用valueOf()要领,假如返回值为原始值,则返回该值
// 2、不然,尝试挪用toString()要领,假如返回值为原始值,则返回该值
// 3、不然,抛出非常
// 注:
// 1、假如第二个参数PreferedType为String,则2和3递次换取,即先挪用toString。
// 2、PreferedType默以为Number,但在碰到Date范例的值时为String
详细转换划定规矩能够参考ECMA范例中9.1的ToPrimitive和[[DefaultValue]]部份
2、转换为数字
划定规矩为:
范例 | 效果 |
---|---|
undefined | NaN |
null | 0 |
Boolean | true为1,false为0 |
Number | / |
String | 转数字,”” -> 0 |
Object | 先ToPrimitive转为原始值再转为数字 |
3、转换为字符串
直接转换,不做赘述,对象范例时参考数字的处置惩罚
相干口试题
[] + {} // 效果为 '[object Object]'
[] + [] // 效果为 ''
{} + {} // 效果为 NaN
{} + [] // 效果为 0,当语句最先为{时,会被JS诠释器以为是代码块,所以实质上是 +[]
{} + {} // 效果为NaN,缘由同上
注:第五道口试题在node.js环境下的运转效果倒是'[object Object]'
,node和chrome一样运用了V8引擎,想来是对此做了特别处置惩罚