我不明白为什么使用===比较两个函数的表达式的值是false

时间:2011-09-17 04:53:40

标签: javascript

这是我的代码:

var emptyFunction = function () {};
console.log(emptyFunction === function () {});

这将在控制台中记录false。为什么呢?

5 个答案:

答案 0 :(得分:5)

因为函数表达式在执行时会产生一个新的函数对象。

仅当两个操作数是同一个对象时,

===才返回true。

从规范(强调我的):

  

生成FunctionExpression:function(FormalParameterListopt){FunctionBody}   评估如下:   1.返回创建一个新的Function对象的结果,如13.2中所指定的参数所指定的   由FunctionBody指定的FormalParameterListopt和body。传入正在运行的LexicalEnvironment   执行上下文作为范围。如果FunctionExpression包含在严格的代码中,则传入true作为Strict标志   如果它的FunctionBody是严格的代码。

答案 1 :(得分:0)

因为

function(){}

是一个匿名函数“instance”。

因此,将emptyFunction设置为匿名函数的一个实例,然后检查它是否“等于”另一个不同的实例。仅仅因为你定义的两个匿名函数在功能上是等价的并不意味着它们是相同的,即它们存在于不同的内存地址。任何语言的结果都是相同的结果(错误)。

答案 2 :(得分:0)

这是因为它们是对象的不同实例,因此它们不会相等。

答案 3 :(得分:0)

=== are used for same objects like checking a boolean variable if it is true or false.

使用===会检查2件事

  1. 对象
  2. 平等
  3. 这样你可以区分1/0和true / false。
    不能用==

    完成

答案 4 :(得分:0)

function(){}实际上是一个错误。试试吧,打开你的控制台,然后输入:

function(){}

然后按回车键。它应该给你一个错误。这是因为您需要将其设置为以下之一:

function foo(){}
var foo = function(){}
(function(){})

失败是因为它们根本不相同。