我通常使用此模式迭代对象属性:
for(var property in object) {
if(object.hasOwnProperty(property)) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我不喜欢这种过度的缩进,最近有人向我指出我可以通过这样做摆脱它:
for(var property in object) {
if(!object.hasOwnProperty(property)) {
continue;
}
...
}
Run Code Online (Sandbox Code Playgroud)
我喜欢这个,因为它没有引入额外的缩进级别.这种模式是否正常,还是有更好的方法?
"我正在阅读'JavaScript:权威指南',我会挂上一个例子:
"您可以使用以下代码将所有对象属性的名称复制到数组中"
var o = {x:1, y:2, z:3};
var a = [], i = 0;
for(a[i++] in o) /* empty */;
Run Code Online (Sandbox Code Playgroud)
我不明白,为什么最后一行真的做了什么,没有说明.为什么它填满阵列?
我正在尝试实现SequenceType/GeneratorType示例并获得一个不太有意义的错误.
这是代码:
// Here's my GeneratorType - it creates a random-number Generator:
struct RandomNumberGenerator:GeneratorType {
typealias Element = Int
mutating func next() -> Element? {
return Int(arc4random_uniform(100))
}
}
Run Code Online (Sandbox Code Playgroud)
当我打电话给它(在Playgrounds中)时,它的效果非常好:
var randyNum = RandomNumberGenerator()
randyNum.next() // this shows a valid random number in the Gutter
// And calling it from within a println also works:
println("randyNum = \(randyNum.next()!)")
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都那么好.
接下来是SequenceType:
struct RandomNumbersSequence:SequenceType {
typealias Generator = RandomNumberGenerator
var numberOfRandomNumbers:Int
init(maxNum:Int) {
numberOfRandomNumbers = maxNum
}
func generate() -> Generator { …Run Code Online (Sandbox Code Playgroud) 我最近偶然发现了在JavaScript中使用for..in循环的问题.
根据这个 问题的答案,for..in旨在枚举对象的属性,包括继承的属性.
如果是这样,为什么我们能够使用Object.defineProperty将属性定义为不可枚举?这不符合for..in的全部意图吗?或者它被认为是不好的做法,应该避免?
另外,为什么我们要首先以这种方式迭代所有属性(即使用for..in循环)?什么时候可以派上用场?
为什么不将所有(Array)原型扩展定义为不可枚举并继续使用for..in和数组?
我需要设置此数组中每个项目的值,然后向上计数。
因此,例如,path [0] .value = 1,path [1] .value = 2等等。
编辑:我正在寻找最有效的方法来做到这一点。
我认为for循环是最好的方法,但是我想学习其他方法。可以使用map()方法或forEach()完成吗?声明中的...呢?我想用纯JS来做,但是如果您可以教我使用jQuery更好的方法,我也很想学习。
提前致谢。
function Cell(x,y){
this.xCoordinate = x;
this.yCoordinate = y;
this.value;
}
var path = [new Cell(0,0), new Cell(0,1), new Cell(0,2)];Run Code Online (Sandbox Code Playgroud)
我在PHP中填充关联数组,并在JS函数中访问该数组。我使用json_encode()将PHP数组转换为JS数组。我使用IE 8运行此应用程序。在使用IE 8的某些计算机中,for(;;)可以工作,但在其他计算机中则失败。在某些使用IE 8的计算机中,for(var in)可以工作,但在其他计算机中则失败。以下代码有什么区别?
for (var k = 0; k < ruleList.length; k++){ //do something }
for (var x in ruleList){ //do something }
Run Code Online (Sandbox Code Playgroud) 我知道for in循环可以帮助迭代对象、原型和集合的属性。
事实是,我需要迭代String.prototype,虽然console.log(String.prototype)显示完整的原型,当我这样做
for (var prop in String.prototype) {
console.log(prop);
}
Run Code Online (Sandbox Code Playgroud)
要显示原型中元素的名称,它什么也不显示,就好像它是空的一样。
JavaScript 引擎是否隐藏了基本的原型方法,还是我做错了什么?
当我加载页面时,会创建一个nodeList,它看起来像这样:
[text, h4, text, span, br, input, br, span, br, input, br, span, br, input, br, span, br, input, br]
Run Code Online (Sandbox Code Playgroud)
我创建了一个for循环遍历所有这些元素的简单循环,并从DOM中删除它们中的每一个.(所有元素都在a <section>)
这是循环:
for(element in videoTitlesElement.childNodes){
if(!isNaN(element)){
videoTitlesElement.removeChild(
videoTitlesElement.childNodes[element]);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在循环结束时,nodeList如下所示:
[h4, span, input, span, input, span, input, span, input]
Run Code Online (Sandbox Code Playgroud)
并非所有元素都被删除.为什么?
谢谢.
My understanding is that for...in loops are designed to iterate over objects in Javascript. See this post and this post.
Take the following example. This returns 'Uncaught TypeError: items is not iterable' in my console.
var text = {
name: "Coptic",
ranges: [[994, 1008], [11392, 11508], [11513, 11520]],
direction: "ltr",
year: -200,
living: false,
link: "https://en.wikipedia.org/wiki/Coptic_alphabet"
};
function dominantDirection(items) {
for (let item of items) {
if (item.direction === 'ltr') {
return 'ltr';
} else {
return 'rtl';
}
} …Run Code Online (Sandbox Code Playgroud)我使用 for...in 循环来记录值,我注意到 for...in 循环中的变量(i在这种情况下为 )是一个字符串。
for (var i in ['a', 'b', 'c']) {
console.log(i, typeof i)
}Run Code Online (Sandbox Code Playgroud)
我在标题为“for-in、for-of 和 for-await-of 语句”的部分搜索了ECMAScript 规范,以获取有关此内容的任何信息,但找不到任何有关此内容的信息。
我的问题是,规范中是否有关于此的任何内容,如果没有,为什么它是一个字符串?
for-in-loop ×10
javascript ×9
arrays ×3
for-loop ×3
foreach ×2
loops ×2
object ×2
enumerable ×1
generator ×1
jquery ×1
nodelist ×1
sequence ×1
swift ×1