Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中加号运算符的域是什么?_Javascript_Operators_Addition - Fatal编程技术网

JavaScript中加号运算符的域是什么?

JavaScript中加号运算符的域是什么?,javascript,operators,addition,Javascript,Operators,Addition,我在看。运算符似乎是在number、string和bool参数的所有组合上定义的。从实验来看,它还定义在数组、对象、null、闭包 问题是:是否存在未定义加号运算符的任何值组合,即这些参数不在+函数的域中?(操作上,“未定义”)基本上意味着如果对这些参数应用了+,将引发异常或程序将因错误而停止。) 回答其他“算术运算符”(似乎远不止算术…)的等效问题的额外积分。只为数字(加法)和字符串(串联)定义了+运算符 但是,它强制其参数为number或string。规范中的完整详细信息。基本上:处理+对操

我在看。运算符似乎是在
number
string
bool
参数的所有组合上定义的。从实验来看,它还定义在数组、对象、null、闭包

问题是:是否存在未定义加号运算符的任何值组合,即这些参数不在
+
函数的域中?
(操作上,“未定义”)基本上意味着如果对这些参数应用了
+
,将引发异常或程序将因错误而停止。)


回答其他“算术运算符”(似乎远不止算术…)的等效问题的额外积分。

只为数字(加法)和字符串(串联)定义了
+
运算符

但是,它强制其参数为number或string。规范中的完整详细信息。基本上:处理
+
对操作数执行“to基元”操作,这意味着它将以数字、字符串、布尔值、空值或未定义值结束。如果强制转换为基元后,其中一个操作数是字符串,则它将另一个操作数强制转换为字符串并进行串联;否则,它将强制执行数字和加法

对象上“to primitive”的结果取决于对象,但大多数对象最终强制为字符串或数字

唯一不能强制为原语的对象是同时缺少
toString
valueOf
*的对象;在这种情况下,告诉我们将抛出
TypeError
。实际上,唯一没有
toString
valueOf
的对象是A)没有自己的副本,B)没有原型或原型链不包含
对象。原型。例如,由
object.create(null)
创建的对象(没有原型)

因此,不存在未定义的
+
值的组合,但存在一个边缘情况,它将抛出
类型错误

  • (正常情况下)两个操作数都可以强制为一个基元,任何基元都可以强制为一个字符串或一个数字(生成的数字当然可能是
    NaN
    ),因此我们得到一个结果值,或者

  • (边缘情况)两个操作数中的一个无法转换为基元,在这种情况下,我们会得到一个
    TypeError



  • *好的,它们不必丢失:如果对象有
    toString
    toString
    返回一个非原语,那么如果对象没有
    valueOf
    或对象有
    valueOf
    ,但
    valueOf
    也返回一个非原语,我们就会得到
    TypeError
    。实际上,
    toString
    valueOf
    应该返回原语。

    只为数字(加法)和字符串(串联)定义
    +
    运算符

    但是,它强制其参数为number或string。规范中的完整详细信息。基本上:处理
    +
    对操作数执行“to基元”操作,这意味着它将以数字、字符串、布尔值、空值或未定义值结束。如果强制转换为基元后,其中一个操作数是字符串,则它将另一个操作数强制转换为字符串并进行串联;否则,它将强制执行数字和加法

    对象上“to primitive”的结果取决于对象,但大多数对象最终强制为字符串或数字

    唯一不能强制为原语的对象是同时缺少
    toString
    valueOf
    *的对象;在这种情况下,告诉我们将抛出
    TypeError
    。实际上,唯一没有
    toString
    valueOf
    的对象是A)没有自己的副本,B)没有原型或原型链不包含
    对象。原型。例如,由
    object.create(null)
    创建的对象(没有原型)

    因此,不存在未定义的
    +
    值的组合,但存在一个边缘情况,它将抛出
    类型错误

  • (正常情况下)两个操作数都可以强制为一个基元,任何基元都可以强制为一个字符串或一个数字(生成的数字当然可能是
    NaN
    ),因此我们得到一个结果值,或者

  • (边缘情况)两个操作数中的一个无法转换为基元,在这种情况下,我们会得到一个
    TypeError



  • *好的,它们不必丢失:如果对象有
    toString
    toString
    返回一个非原语,那么如果对象没有
    valueOf
    或对象有
    valueOf
    ,但
    valueOf
    也返回一个非原语,我们就会得到
    TypeError
    。实际上,
    toString
    valueOf
    应该返回原语。

    哇,我不知道你是如何快速全面地回答这个问题的!我读你的答案所花的时间比你读我的问题和写你的回答所花的时间要长!不管怎样,那很酷,谢谢。很高兴了解
    对象。create(null)
    ——这是一个很好的例子。哇,我不知道你是如何快速全面地回答这个问题的!我读你的答案所花的时间比你读我的问题和写你的回答所花的时间要长!不管怎样,那很酷,谢谢。很高兴了解
    对象。create(null)
    ——这是一个很好的例子。