0

在编写 JavaScript 时,我总是理所当然地认为将两个整数相加会产生另一个整数。或者将两个字符串加在一起会导致串联。但我开始思考,在使用这些实例执行操作之前,语言如何在幕后确定实例的类型?

var one = 1;
var two = 2;
var fourStr = 'four';
var floaty = 1.5;

//this results in an integer
var three = one + two;           //3

//but this results in a string
var result = fourStr + one;      //'four1'

//and this results in a float
var floatenized = one + floaty;  //2.5

运行时是否只是确定实例类型,然后引用某种内部类型优先级或其他什么?当不同类型的实例组合在一起时,谁能准确解释运行时如何执行这些操作?

4

2 回答 2

3

ecmascript规范准确地描述了操作符+(第 11.6.1 节)如何处理不同的类型。

与您的示例相关:

  • (number) +(number): 结果将是浮点数的总和
  • (string) +(number):结果将是字符串的连接和数字的字符串表示形式
  • (数字)+(字符串):结果将是数字和字符串的字符串表示形式的连接

+也可以作为一元运算符将字符串转换为数字,就像二元-运算符一样(例如:+"4"+5==9, 5-"4"==1)。

类型转换算法在规范的第 9 节中描述。未指定环境应如何存储基元和对象的类型。

于 2012-04-13T13:09:20.950 回答
2

当您将数字分配给变量时

var one = 1;
//or
var floaty = 1.5;

值类型是数字....当您将字符串分配给变量时

var fourStr = 'four';

值类型是字符串。当您添加一个字符串和一个数字时,它会将数字转换为一个字符串,然后连接两个字符串

请参阅 Mozilla 的此文档的值部分

于 2012-04-13T13:08:00.577 回答