javascript学习笔记 "+"运算符以及String和Number

本文深入探讨了JavaScript中+运算符的作用机制,包括其在数字与字符串之间的转换规则,以及在处理不同数据类型如数组、对象、布尔值、null、undefined时的行为。特别关注了Number和String机制下的数据转换过程,以及一些特例情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

"+"运算符以及String和Number

输入:>>>
输出:<<<

"+"运算符转换规则

如果不全是数字则优先转化为字符串 因该是如果有一个字符串或者对象就转换字符串
>>> 1+“1”
<<< “11”
相当于String(1)+“1”
>>> “1”+1
<<< “11”

只操作一个数据时相当于Number()
>>> +“1”
<<< 1
相当于Number(“1”)

连接字符串
>>> “123”+“45”
<<< “12345”

总结:仅操作一个数据就是Number,有多个数据时但是不全是数字则其实是两个数据String()后相加

String机制

>>> String([])
<<< “”
首先看对象有没有toString这个函数
如果有的话是否返回一个原始值(数字,字符串,布尔值,null,undefined,NaN)
如果没有返回原始值则抛出类型异常错误。
如果没有toString则会检查有没有valueOf然后同上
做个试验验证一下

var test = {
				a:1,
				toString:function(){ return 123 },
			}
String(test)
//这里会输出 “123”
相当于 String(test.toString())

这里再做一个返回非原始值的实验

var test = {
				a:1,
				toString:function(){ return /asdf/ },//我们返回一个正则
			}
String(test)
这里报错了
TypeError: Cannot convert object to primitive value

Number机制

>>> Number([])
<<< 0
类似于String
但是先去找valueOf再去找toString
错误都是TypeError
javascript权威指南第6版
53页3.8.3 对象到数字中说会抛出类型异常错误
String()是会抛出 如果使用Number的话如果不能转换会转成 NaN

混合作用

>>> 1 + []//这个像0的是空数组 [ ]
猜是啥
首先不是全是数字所以优先字符串也就是说 一个数字一个对象所以优先字符串
相当于
>>> 1 + String([])
相当于
>>> 1 + String([].toString())
相当于
>>> 1 + ‘’
<<< '1’

特例

>>> 1 + true
<<< 2

>>> 1 + null; 1 + false
<<< 1

但要注意Number(undefined) 和 Number(NaN)是NaN
因此
>>> 1 + undefined
<<< NaN

几个固定值

只要是原始量Number和String能都进行转换
Number(null) = 0
Number(undefined) = NaN
Number(true) = 1
Number(false) = 0
String(null) = ‘null’
String(undefined) = 'undefined’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值