例如,JavaScript是非严格类型的语言,如Java.
我们知道,它根据上下文转换结果的值:
"2" + "3"
结果 "23"
"2" * "3"
结果 6
这很清楚,可以理解.
我只是尝试了以下表达式并感到困惑:
true && 1
结果1
true || 1
结果true
为什么第一个给出Number而第二个给出布尔值?
考虑到JavaScript转换规则,boolean
由于boolean
表达式的上下文,我希望在这两种情况下获得值.
我对使用&&
这样的声明变量的实际应用感兴趣:
var x = undefined && 4;
// Evaluate to the first falsey value
// or else the last value.
eval(x);
// undefined
Run Code Online (Sandbox Code Playgroud)
我理解如何评估价值(参见本答复).我也理解它的姐妹||
(参见这里有一个很好的描述)以及为什么用以下表达式声明变量是有用的:
// Some other variable
var y;
var x = y || 4;
// Evaluate to the first truthy value
// or else the last value.
Run Code Online (Sandbox Code Playgroud)
实际上:使用第一个值,除非第一个值为false; 如果是这样,请使用最后一个值.我们可以||
在浏览器控制台中演示这个特性:
> null || 4
4
> 4 || null
4
> null || undefined
undefined
> undefined || null …
Run Code Online (Sandbox Code Playgroud) 我目前正在阅读Addy Osmani的JavaScript设计模式,可以在这里找到:http://addyosmani.com/resources/essentialjsdesignpatterns/book/.
我发现它非常有趣,非常有帮助.我确实对本书中的一种模式有一个疑问,即命令模式.
在本书中,Addy解释了命令模式有助于更好地解耦对象和方法调用.
这是他的例子我的版本:
var person = {
sayName: function (name) {
return "My name is " + name;
},
sayAge: function (age) {
return "My age is " + age;
},
sayGender: function (gender) {
return "My gender is " + gender;
}
}
person.execute = function (name) {
return person[name] && person[name].apply(person, [].slice.call(arguments, 1));
}
console.log(person.execute("sayName", "Sethen"));
Run Code Online (Sandbox Code Playgroud)
魔术是在execute方法中完成的.如您所见,您传递方法名称和参数,该方法负责其余部分.
我的困惑源于该execute
方法实际返回的内容.当你看它时,它看起来像一个短路&&
,我一直认为由于JavaScript转换而返回一个布尔值.
但是,如果您尝试使用代码,则可以正常运行,并进行日志记录My name is Sethen
.
此外,我发现简单地使用return person[name].apply(person, [].slice.call(arguments, …
var operand1 = null;
var operand2 = true;
var booleanOperatorReturnsABoolean = operand1 && operand2;
booleanOperatorReturnsABoolean == false || booleanOperatorReturnsABoolean == true
Run Code Online (Sandbox Code Playgroud)
结果:假
在 JavaScript 控制台中运行此命令表明布尔运算符 (&&) 有时可能不会产生布尔值