ZenOven's Archivers

From zenoven on 2018-05-19 21:31:24

a + b in JavaScript

计算方法

  1. 将A和B都转换为原始值(primitive,执行ToPrimitive),这里记为A1,B1

  2. 如果A1和B1中有一个值为string,则将A1、B1都转换为string(执行ToString),其值记为A2、B2,将A2 B2连接后就是A+B的结果

  3. 否则的话将A1、B1都转换为number(执行ToNumber),其值记为A3、B3,将A3 B3相加即为A+B的结果


ToPrimitive(obj,preferredType)


JS引擎内部转换为原始值ToPrimitive(obj,preferredType)函数接受两个参数,第一个obj为被转换的对象,第二个preferredType为希望转换成的类型(默认为空,接受的值为Number或String)

在执行ToPrimitive(obj,preferredType)时如果第二个参数为空并且obj为Date的实例时,此时preferredType会被设置为String,其他情况下preferredType都会被设置为Number

如果preferredType为Number,ToPrimitive执行过程如下:

  1. 如果obj为原始值,直接返回;

  2. 否则调用 obj.valueOf(),如果执行结果是原始值,返回之;

  3. 否则调用obj.toString(),如果执行结果是原始值,返回之;

  4. 否则抛异常。


如果preferredType为String,将上面的第2步和第3步调换,即:

  1. 如果obj为原始值,直接返回;

  2. 否则调用obj.toString(),如果执行结果是原始值,返回之;

  3. 否则调用 obj.valueOf(),如果执行结果是原始值,返回之;

  4. 否则抛异常。


我写的一个ToPrimitive函数可以在这里查看 >> JS Bin - Collaborative JavaScript Debugging

查看完整版本: a + b in JavaScript

Tags: JS, plus


©ZenOven