热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

理解JS中的加号运算符

基本运算规则+的使用有两种情况当+连接两个变量或值时即为二元运算符,比如a+b,当+在变量或值前面时,则为一元运算符,比如+12.1一元运算符直接转换为Number类型,相当于Nu

《理解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类型的转换


推荐阅读
author-avatar
手机用户2602937913
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有