当前位置: 首页 > 后端技术 > Node.js

了解JS中加号运算符

时间:2023-04-03 14:51:48 Node.js

的基本运算规则+的使用有两种情况当+连接两个变量或值时,它是一个二元运算符,比如a+b,当+在前面时variable或value,则为一元运算符,如+'12.1'一元运算符直接转换为Number类型,相当于Number()。最常用的!运算符用于转换为布尔类型的二元运算符加法,可以认为只有两种情况1,number+number2,string+string等类型的值最终都会隐式转换为以上两种的加法类型。JS中有6种基本数据类型(原语)。String、Number、Boolean、undefined、null、Symbol引用数据类型是指除上述基本数据类型以外的所有值,如Array和Function隐式类型转换加法隐式转换:1.转换为原始值时转换为原始值,抽象操作ToPrimitive()将在JS引擎内部执行。ToPrimitive(input,PreferredType?)//如果是原始值,直接返回//如果是引用数据类型,则//1.首先尝试调用valueOf()方法,如果返回值是原始值value,则返回值//2,否则,尝试调用toString()方法,如果返回值是原始值,则返回值//3,否则,抛出异常//注意://1,如果第二个参数PreferredType是String,那么2和3的顺序就变了,也就是先调用toString。//2.PreferredType默认是Number,但是遇到Date类型的值就是String。具体的转换规则可以参考ECMA规范中9.1的ToPrimitive和[[DefaultValue]]部分。1.false是0Number/String转换数字,""->0Object先ToPrimitive转换为原值再转换为数字3.转换为字符串直接转换,不赘述,参考数字处理相关面试题对象类型[]+{}//结果是'[objectObject]'[]+[]//结果是''{}+{}//结果是NaN{}+[]//result为0,当语句以{开头时,会被JS解释器认为是代码块,所以本质上是+[]{}+{}//结果为NaN,原因同上注:node.js环境下第五道面试题的结果是'[objectObject]',node和chrome也是用的V8引擎,估计对此做了特殊处理参考深入理解Object类型转换在Javascript中