Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS&;jQuery:inArray()和indexOf()如果索引是字符串,是否工作不正常?_Javascript_Jquery_Arrays_Indexof - Fatal编程技术网

Javascript JS&;jQuery:inArray()和indexOf()如果索引是字符串,是否工作不正常?

Javascript JS&;jQuery:inArray()和indexOf()如果索引是字符串,是否工作不正常?,javascript,jquery,arrays,indexof,Javascript,Jquery,Arrays,Indexof,我有这样一个数组: var arr = []; arr['A string'] = '123'; arr['Another string'] = '456'; 我想找一个索引'123'或'456' 两者: 及 你给了我-1。当索引是字符串时,是否可以使其工作?问题是,您正在使用JavaScript数组作为关联数组。JavaScript数组的索引是无符号32位整数,因此不能使用*strings**。您可以使用这样的数组 // I'm guessing that you meant to give

我有这样一个数组:

var arr = [];
arr['A string'] = '123';
arr['Another string'] = '456';
我想找一个索引'123'或'456'

两者:


你给了我-1。当索引是字符串时,是否可以使其工作?

问题是,您正在使用JavaScript数组作为关联数组。JavaScript数组的索引是无符号32位整数,因此不能使用*strings**。您可以使用这样的数组

// I'm guessing that you meant to give numerical and not string values
var arr = [123, 456];
或者使用一个对象

var obj = { 
    'A string' : 123,
    'Another string' : 456
};
请注意,使用对象时,
“一个字符串”和
“另一个字符串”
是对象
obj
的属性,不能像数组中的值那样进行索引。您可以通过多种方式检查对象是否具有属性,其中之一是使用
hasOwnProperty

if (obj.hasOwnProperty('A string')) {
    // if obj has property 'A string' as a direct property
}
另一种方法是在
关键字中使用

if ('A string' in obj) {
    // if obj has a property 'A string' as a property (could be an inherited property too)
}

**除非如前所述,字符串是32位无符号整数的字符串表示形式,但我认为公平地说,许多JavaScript开发人员会说,为了清晰起见,坚持使用整数。*

问题在于,您将JavaScript数组用作关联数组。JavaScript数组的索引是无符号32位整数,因此不能使用*strings**。您可以使用这样的数组

// I'm guessing that you meant to give numerical and not string values
var arr = [123, 456];
或者使用一个对象

var obj = { 
    'A string' : 123,
    'Another string' : 456
};
请注意,使用对象时,
“一个字符串”和
“另一个字符串”
是对象
obj
的属性,不能像数组中的值那样进行索引。您可以通过多种方式检查对象是否具有属性,其中之一是使用
hasOwnProperty

if (obj.hasOwnProperty('A string')) {
    // if obj has property 'A string' as a direct property
}
另一种方法是在
关键字中使用

if ('A string' in obj) {
    // if obj has a property 'A string' as a property (could be an inherited property too)
}

**除非如前所述,字符串是32位无符号整数的字符串表示形式,但我认为公平地说,许多JavaScript开发人员会说,为了清晰起见,坚持使用整数。*

像所有数组方法和
length
属性一样,
Array
对象的
indexOf
方法只考虑数组的数值属性。这些属性的名称是无符号整数。要测试具有特定值的属性是否存在,可以对任何对象(包括数组)执行类似操作。无法保证属性名称的枚举顺序,因此如果有多个属性具有特定值,则无法确定将获得哪个属性:

function findPropertyWithValue(obj, val) {
    for (var i in obj) {
        if (obj.hasOwnProperty(i) && obj[i] === val) {
            return i;
        }
    }
    return null;
}

var arr = [];
arr['A string'] = '123';
arr['Another string'] = '456';
alert(findPropertyWithValue(arr, "123")); // 'A string'
请注意,由于所有属性名称(包括数字名称)都转换为字符串,因此可以使用字符串指定数组属性:

var arr = [];
arr["1"] = "foo";
arr[3] = "bar"
arr.indexOf("foo"); // 1
arr.indexOf("bar"); // 3

与所有数组方法和
length
属性一样,
Array
对象的
indexOf
方法只考虑数组的数值属性。这些属性的名称是无符号整数。要测试具有特定值的属性是否存在,可以对任何对象(包括数组)执行类似操作。无法保证属性名称的枚举顺序,因此如果有多个属性具有特定值,则无法确定将获得哪个属性:

function findPropertyWithValue(obj, val) {
    for (var i in obj) {
        if (obj.hasOwnProperty(i) && obj[i] === val) {
            return i;
        }
    }
    return null;
}

var arr = [];
arr['A string'] = '123';
arr['Another string'] = '456';
alert(findPropertyWithValue(arr, "123")); // 'A string'
请注意,由于所有属性名称(包括数字名称)都转换为字符串,因此可以使用字符串指定数组属性:

var arr = [];
arr["1"] = "foo";
arr[3] = "bar"
arr.indexOf("foo"); // 1
arr.indexOf("bar"); // 3

当使用字符串作为标记时,数组是一个对象。当使用字符串作为标记时,数组是一个对象。