我有一个像这样的想象中的Javascript代码
let z = 99999;
if (str.lastIndexOf('_') !== -1)
z = str.lastIndexOf('_');
}
这段代码:
str.lastIndexOf('_')
会被计算两次吗?z = str.lastIndexOf('_') !== -1 ? str.lastIndexOf('_') !== -1 : 99999
;
如果要计算两次,是否意味着最好的方法是将
str.lastIndexOf('_')
放入单独的变量中并在条件中使用它?
我想知道故意忽略执行模式 可以通过词汇目的来证明。
我们可以通过覆盖来测试
lastIndexOf
const orig = String.prototype.lastIndexOf
String.prototype.lastIndexOf = function(...args) {
console.log('running lastIndexOf')
orig.call(this, ...args);
}
const str = '31231231231312_1312312'
let z = 99999;
if (str.lastIndexOf('_') !== -1) {
z = str.lastIndexOf('_');
}
如您所见,打印了 2 次