是逻辑运算符||在返回一侧之前执行双方

时间:2017-05-09 04:50:50

标签: javascript constructor return apply logical-operators

我创建了自己的new函数。

function Person(firstName, lastName) {
this.firstName = firstName;  
this.lastName = lastName;
}

Person.prototype.getName = function() {  
console.log(this.firstName + " " + this.lastName)
}

function spawn(constructor) {
var obj = {}
Object.setPrototypeOf(obj, constructor.prototype)
var myArray = Array.prototype.slice.apply(arguments)
return constructor.apply(obj, myArray.slice(1)) || obj

}

var crockford = spawn(Person, "Douglas", "Crockford")
crockford.getName();

我对逻辑运算符||的操作感到困惑。

constructor.apply(obj, myArray.slice(1)) || obj它接缝javascript引擎首先执行代码的左侧,即使它是假的(意味着应用函数在返回obj之前应用于构造函数)然后返回||的右侧运营商。我对吗?请考虑以下代码,

var app = constructor.apply(obj, myArray.slice(1)) return app || obj

在这种情况下,constructor.apply(obj, myArray.slice(1))已经应用于构造函数。它不依赖于逻辑运算符的返回值。

我只想要澄清做||运算符在返回之前执行函数的两侧,或者只选择一个而另一个甚至不执行..我认为它执行constructor.apply(obj, myArray.slice(1))为什么我得到的结果 Douglas Crockford

3 个答案:

答案 0 :(得分:0)

'&&'的右侧。和' ||'逻辑运算符只有在左侧是“假”的情况下才会被评估和返回。和' truthy'分别

将始终评估左侧。

MDN Logical Operators

答案 1 :(得分:0)

如果您要检查A operator B == true

- 在逻辑OR的情况下,仅当第一个操作数求值为false(0)时才计算第二个操作数

- 在AND的情况下,仅当第一个操作数的计算结果为真(1)时才计算第二个操作数。

答案 2 :(得分:0)

||&&运算符都会检查

  1. 如果结果足以猜测整个结果,则只有LHS(即true时为||false时为&&。< / p>

  2. 如果LHS的结果不足以猜测整个结果,则
  3. 检查LHS和RHS。 (如果||的LHS为false&&的LHS为true,则它还会检查RHS。