明白JS中的加号运算符

《明白JS中的加号运算符》

基础运算划定规矩

+的运用有两种状况
+衔接两个变量或值时即为二元运算符,比方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、转换为数字

划定规矩为:

范例效果
undefinedNaN
null0
Booleantrue为1,false为0
Number/
String转数字,”” -> 0
Object先ToPrimitive转为原始值再转为数字

3、转换为字符串

直接转换,不做赘述,对象范例时参考数字的处置惩罚

相干口试题

[] + {} // 效果为 '[object Object]'
[] + [] // 效果为 ''
{} + {} // 效果为 NaN
{} + [] // 效果为 0,当语句最先为{时,会被JS诠释器以为是代码块,所以实质上是 +[]
{} + {} // 效果为NaN,缘由同上

注:第五道口试题在node.js环境下的运转效果倒是'[object Object]',node和chrome一样运用了V8引擎,想来是对此做了特别处置惩罚

参考

深切明白Javascript中Object范例的转换

    原文作者:夜雪暮歌
    原文地址: https://segmentfault.com/a/1190000018627133
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞