我想知道是否__CODE__有"短路"评估,如C#中的&& Operator.如果不是,我想知道是否有采用合理的解决方法.
http://ejohn.org/files/pretty.js
// Takes an ISO time and returns a string representing how
// long ago the date represents.
function prettyDate(time){
var date = new Date((time || "").replace(/-/g,"/").replace(/[TZ]/g," ")),
diff = (((new Date()).getTime() - date.getTime()) / 1000),
day_diff = Math.floor(diff / 86400);
if ( isNaN(day_diff) || day_diff < 0 || day_diff >= 31 )
return;
return day_diff == 0 && (
diff < 60 && "just now" ||
diff < 120 && "1 minute ago" ||
diff < 3600 && Math.floor( …Run Code Online (Sandbox Code Playgroud) 在挖掘一些代码时,我发现了以下代码段:
"string" != typeof myVar && (myVar = "");
Run Code Online (Sandbox Code Playgroud)
我明白这里发生了什么。如果 myVar 不是字符串,则第一个条件的计算结果为 true,因此计算第二个条件,导致 myVar 设置为 ""。所以它本质上是以下内容的替代品:
if ("string" != typeof myVar)
myVar = "";
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, …
我在javascript中有以下代码行:
q && (c = q === "0" ? "" : q.trim());
Run Code Online (Sandbox Code Playgroud)
这是什么意思?我明白这c等于空字符串或q.trim()结果,但是什么意思q && ()?