我在理解JavaScript中的"in"运算符时遇到了一些小问题。为什么我不能进入下面示例中的if
块?我该如何做呢?
var ar = [];
var a = 4;
ar.push(a);
if (a in ar){
console.log("in if");
}
console.log(ar);
console.log(a);
console.log(typeof(ar[0]));
console.log(typeof(a));
我在理解JavaScript中的"in"运算符时遇到了一些小问题。为什么我不能进入下面示例中的if
块?我该如何做呢?
var ar = [];
var a = 4;
ar.push(a);
if (a in ar){
console.log("in if");
}
console.log(ar);
console.log(a);
console.log(typeof(ar[0]));
console.log(typeof(a));
in
运算符用于测试对象中是否存在给定的属性名,它不会搜索值。如果 ar[a]
存在,则 a in ar
将返回 true。在您的示例中,ar[0]
存在,但 ar[4]
不存在,因此 a in ar
为 false。indexOf
函数。它返回找到的元素的数组索引,如果找不到该值,则返回 -1
。if (ar.indexOf(a) != -1) {
console.log("in if");
}
for (x in obj)
时,它设置x
为对象的属性名称,而不是值。 - Barmarvar ar = [];
var a = 4;
ar.push(a);
if(0 in ar){
console.log("in if");
}
var student = {name: "John", lastName: "Cena", age: 30};
if(name in student){
console.log("in if");
}
想象一个看起来像这样的对象和数组:
var obj = { foo: "bar" };
var arr = ["bar"];
你可以通过在对象上调用相应的键来访问obj
的bar
值,例如:
obj.foo // "bar"
另一种做法是使用数组语法:
obj["foo"] // "bar"
正如您所看到的,每个对象的键都有一个名称(即foo)。数组仍然是一个对象,只是它的“键”(或索引)是递增的数字值。因此,我们使用数组中各自的索引来访问数组中的各个元素,例如:
arr[0] // "bar"
in
关键字应该更加清晰。MDN将in
关键字定义如下:
因此,根据我们之前的示例,考虑以下情况:如果指定的属性在指定的对象中,则in运算符返回true。
"foo" in obj // true
"bar" in obj // false
obj
只有一个元素,该元素的键是foo
,它的值是bar。考虑一下您的数组:var ar = [];
var a = 4;
ar.push(a);
0 in ar // true
4 in ar // false
如你现在所见,就像它对js对象进行的调查一样,在数组中,in
关键字仍然寻找键而不是与该键对应的值。虽然索引0处的值为4,但其键(或索引)仍然是0。因此,应该清楚为什么要调用...
4 in ar // false
false
- 该数组的第四个索引中没有任何内容。希望这可以帮到你。这是因为in
运算符寻找的是属性名,而不是属性值。
对于数组来说它可以正常工作,但你需要指定项的索引,而不是值:
var ar = [];
var index = 4;
var value = 5;
ar[index] = value;
if (index in ar){
console.log("in if");
}
in
运算符测试 键 而不是 值。 - Barmar