JS中“+”的用法
0 Views 前端 with
本文字数:1,097 字 | 阅读时长 ≈ 4 min

JS中“+”的用法

0 Views 前端 with
本文字数:1,097 字 | 阅读时长 ≈ 4 min

本文介绍加法操作符的用法

加法操作符的行为表现是:

  1. 当两个操作数都是数字或者都是字符串的时候,计算结果是显而易见的

  2. 如果其中一个操作数是字符串或者转化为字符串的对象,另外一个操作会将会被转换为字符串,加法将进行字符串的连接操作

  3. 如果两个操作数都不是字符串的,那么都将进行算术加法运算。

1
2
3
4
5
1 + 2           //=> 3:加法
"1" + "2" //=> "12":字符串连接
"1" + 2 //=> "12":数字转化为字符串后进行字符串的连接
1 + {} //=> "1[object object]":对象转换为字符串后进行字符串连接
true + true //=> 布尔值转换为数字后做加法

JavaScript类型装换表

字符串 数字 布尔值 对象
undefined “undefined “ NaN false TypeError
null “null “ 0 false TypeError
true “true “ 1 D3 new Boolean(true)
false “false “ 0 D4 new Boolean(true)
“” 0 false new String(“”)
“1.2” 1.2 true new String(“1.2”)
“one” NaN true new String(“one”)
0 “0” false new Number(0)
-0 “0” false new Number(-0)
NaN “NaN” false new Number(NaN)
Infinity “Infinity” true new Number(Infinity)
-Infinity “-Infinity” true new Number(-Infinity)
1(无穷大,非零) “1” true new Number(1)
{}(任意对象) [object] ….. true
[](任意数组) “” 0 true
[9](1个数字数组) “9” 9 true
[‘a’](其他数组) 使用join()方法 NaN true
function(){} [object] NaN true

对象转化为原始值

对象到布尔值:所有的对象(包括数组和函数)都转化为true。
对于包装对象亦是如此:new Boolean(false)是一个对象而不是原始值,它将转化为true。

对象到字符串:toString()

步骤:

很多类定义了更多版本的toString()方法。例如,

  1. 数组类(Array class)的toString()方法会将每个数组元素转化为一个字符串,并在元素之间添加逗号后合并结果字符串。
  2. 函数类(Function class)的toString()方法返回这个函数的实现定义的表示方式,实际上,这里的实现方式是通常是将用户定义的函数转化为JavaScript源代码字符串。
  3. 日期类(Date class)定义的toString()方法返回一个可读的日期和时间字符串。
  4. RegExp类(RegExp class)定义的toString()方法将RegExp对象转化Wie表示正则表达式直接量的字符串
1
2
3
4
5
6
7
8
9
[1, 2, 3].toString()[1, 2, 3].toString();

function(x) {
f(x)
}).toString();

/d+/g.toString();

(new Date(2018, 4, 8)

对象到字符串:valueOf()

这个方法的任务并未详细定义:如果存在任意原始值,它将默认讲对象转化为它的原始值。

对象是复合值,而且大多数对象无法真正表示为一个原始值,因此默认额valueOf()方法简单的返回对象本身,而不是返回一个原始值。

数组,函数和正则表达式简单的继承了这个默认方法,只是简单的返回对象本身。

日期类定义的方法会返回一个内部表示:1970年1月1日以来的毫秒数

1
2
var d = new Date(2018, 8, 8);
console.log(d.valueOf());

步骤:

对象转换为数字的细节解释了为什么空数组会被转换为数字0以及为什么具有单个元素的数组同样会转换成一个数字。

数组继承了默认的valueOf()方法,这个方法返回一个对象而不是原始值,因此,数组到数字的转换则调用toString()方法。空数组转换成为空字符串,空字符串转换成数字0.

Sep 02, 2018