扩展空数组的逻辑OR ||语法
Extending the logical OR || syntax for the empty array
设f
和g
为两个函数。然后f() || g()
先评估f
。如果f
的返回值为false,则计算g
,并返回g
的返回值。
我喜欢它简洁的语法,但是它不包括f
返回空数组[]
的情况,我想认为这是"false"。
是否有干净的方式有这种语法的[]
而不是传统的假值?
您可以编写一个函数,将空数组转换为真实的假值,也许?
function e(a) { return a instanceof Array ? (a.length ? a : false) : a; }
var result = e(f()) || g();
所提出的其他解决方案的问题是,它的行为不完全是您可能希望的短路工作方式。例如,在||
运算符之前将f()
的值转换为真值意味着失去返回f()
的结果的能力。所以这是我的首选解决方案:编写一个像||
操作符一样的函数。
// let's call the function "either" so that we can read it as "either f or g"
function either () {
var item;
// return the first non-empty truthy value or continue:
for (var i=0;i<arguments.length;i++) {
item = arguments[i];
if (item.length === 0 || !item) continue
return item;
}
return false;
}
现在可以像使用||
运算符一样使用either()
函数:
either(f(), g());
为什么不直接在f()
进行长度检查呢?
function f(){
var returned_array = new Array();
...
if(!returned_array.length)
return false;
}
如果你谈论的是实际重载||运算符,你不能在JavaScript中这样做(它在ECMAScript 4中被提议,但被拒绝了)。如果你真的想在JavaScript中重载操作符,你必须使用像JavaScript Shaper这样的东西,它是"JavaScript语法树塑造的可扩展框架"——你实际上可以使用它来重载操作符。
相关文章:
- 铬:“;未捕获的语法错误:意外的标记:"
- jQuery语法添加了var
- Javascript未捕获语法错误意外的标识符错误
- 为什么忽略了eval()代码中的语法错误
- 难以访问的JS环境中的语法错误
- 如何告诉MathJax对下标使用替代语法
- Javascript语法向设置发出sessionStorage值
- Angular 2.0 with JavaScript or TypeScript?
- 未捕获的语法错误:意外的标记{
- 使用$scope方法时的ControllerAs语法
- "未捕获的语法错误:意外的标记}"
- javascript自执行函数-不同的语法
- 函数的Javascript语法
- WinJS内联绑定语法
- SharePoint 2010 Jquery/JSON Rest Multiple OR语句-如何
- 在 JavaScript 中,条件语句中 OR 运算符的正确语法是什么?我错过了什么
- 这个'OR'的正确语法是什么?和& # 39;和# 39;in this 'IF'声明
- 扩展空数组的逻辑OR ||语法
- ""的正确语法是什么;OR";内部条件";IF"
- 在gulp JavaScript变量中的OR语法