增强的 Javascript 语句使用安全
Enhanced Javascript for-statement safe to use?
jQuery for-loop 非常慢,这就是为什么我考虑更频繁地使用常规 for-语句的原因。为了直接访问当前元素,我找到了以下语法(对于常规数组,当然不是针对对象(:
for (var i = 0, e; e = array[i]; i++) { ... }
其中循环中的e
表示当前元素。
此语法在所有浏览器中使用是否安全?
加法
好的,我想这可以工作,但对于简短的符号来说,它不再那么有用了:
for (var i = 0, e; (e = array[i]) !== void(0); i++) { ... }
谢谢大家的回答!
这不是一个非常好的循环。请考虑以下数组:
var array = [0, 1, 2, 3];
它将在第一个元素上停止,因为0
是一个假值。与
var array = ["foo", "bar", false, "hello"];
它只会"foo"
和"bar"
考虑使用此循环
for (var i=0, len=array.length; i<len; i++) { ... }
它可以在任何地方工作,只计算一次array.length
,并且性能很高。
根据 T.J. 的评论,上面的 args i
和len
的范围将存在您当前的函数。因此,请注意不要制造变量冲突。
一种常见(但笨拙(的防范方法是在 var 前面加上 _
。喜欢这个
for (var _i=0, _len=array.length; _i<_len; _i++) { ... }
我不建议这样做。你看,如果你的数组看起来像这样,例如:
array = ["lala", 078, false, 992, "kas"];
然后你的循环只会通过前两个,因为术语 e = array[i];
会返回 false,因为数组中的第三个条目实际上是 false。这样更好:
for (var i = 0, e; (e = array[i])===undefined; i++) { ... }
确保没有人覆盖未定义的变量,例如通过使用闭包: 这个JavaScript/JQuery语法是如何工作的:(function( window, undefined ( { }((window(?
正如 naomik 指出的那样,如果任何数组元素具有 falsey 值,这种形式的循环将中断。假值是 false
、null
、undefined
、""
、0
和 NaN
。因此,例如,它将适用于非空对象引用数组。对于字符串或数字数组来说并非如此。
但是,如果你的问题是关于语法的,那么是的,它是"安全的",因为它可以在所有JavaScript引擎中工作(并且在错误元素上失败(。您依赖的关键部分是:
-
在数组末尾之外访问元素(例如,在
array[array.length]
(会给你一个假值(undefined
(,而不是抛出异常,并且 -
赋值表达式的结果(
e = array[i]
(是赋值的值。
是的,两者都是可靠的。(好吧,如果数组真的是一个 JavaScript 数组,#1 是可靠的。主机提供的类似数组的对象可能会有所不同。
无论如何,请注意,i
和 e
都不仅仅局限于循环。ES6 将具有 let
,但用 var
声明的变量的作用域为它们所在的函数。
- 可以't让我的if语句处理js中的html表单输入
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 如何在读取XLS/XLSX本地文件时,使用IE的javascript代码启用未标记为安全的ActiveX控件
- 使用javascript存储变量的最安全方式
- 自动修复”;语句前缺少分号“;
- 如何在 API 调用后和 if 语句中启用提交按钮
- 是“;x==a||b”;以及“;x==a||x==b”;JavaScript中的等效语句
- 带有多个elseif的Javascript if语句
- 这个条件语句的逻辑有问题
- 是否存在React Native“;WEB代码安全防护”;
- Sharepoint JScript if语句未执行
- 内容安全策略:页面's设置阻止加载资源
- 为什么继续;语句冻结浏览器
- Javascript:If-then语句在函数中不起作用
- SharePoint 2010 Jquery/JSON Rest Multiple OR语句-如何
- for循环中的javascript if语句找不到==
- 当使用extern和目标JavaScript时,我如何强制Haxe编译器使用require语句
- 增强的 Javascript 语句使用安全
- 在语句之间安全使用逗号
- 在JavaScript switch语句中假定严格比较是否安全?