Javascript对象属性与数组值
我试图学习javascript(来自Delphi/pascal),但不清楚对象属性和数组值之间的异同。我确实试着在档案馆和网络上搜索这个答案 考虑以下代码:Javascript对象属性与数组值,javascript,arrays,object,Javascript,Arrays,Object,我试图学习javascript(来自Delphi/pascal),但不清楚对象属性和数组值之间的异同。我确实试着在档案馆和网络上搜索这个答案 考虑以下代码: function Show(Arr) { var str =''; for (var Val in Arr) { str += Val + '::' + Arr[Val] + '\n'; } return str; } var str = ''; var A1 = ["Yellow", "Red", "Bl
function Show(Arr) {
var str ='';
for (var Val in Arr) {
str += Val + '::' + Arr[Val] + '\n';
}
return str;
}
var str = '';
var A1 = ["Yellow", "Red", "Blue"];
var A2 = {"color":"red", "Size": 5, "taste":"sour"}
alert(Show(A1));
//OUTPUTS:
// 0::Yellow
// 1::Red
// 2::Blue
A1.push("Green");
alert(Show(A1));
//OUTPUTS:
// 0::Yellow
// 1::Red
// 2::Blue
// 3::Green
alert('Length: '+A1.length);
//OUTPUTS:
// Length: 4
alert(Show(A2));
//OUTPUTS:
// color::red
// Size::5
// taste:sour
alert('Length: '+A2.length);
//OUTPUTS:
// Length: undefined
A2.push("Green");
//ERROR --> execution stops on jsfiddle.net.
alert("OK"); //<-- never executed
alert(Show(A2)); //<-- never executed
功能显示(Arr){
var-str='';
for(Arr中的var Val){
str+=Val+'::'+Arr[Val]+'\n';
}
返回str;
}
var-str='';
变量A1=[“黄色”、“红色”、“蓝色”];
变量A2={“颜色”:“红色”,“大小”:5,“味道”:“酸味”}
警报(显示(A1));
//产出:
//0::黄色
//1::红色
//2::蓝色
A1.推动(“绿色”);
警报(显示(A1));
//产出:
//0::黄色
//1::红色
//2::蓝色
//3::绿色
警报(“长度:”+A1.长度);
//产出:
//长度:4
警报(显示(A2));
//产出:
//颜色:红色
//尺寸:5
//味道:酸味
警报(“长度:”+A2.长度);
//产出:
//长度:未定义
A2.推送(“绿色”);
//错误-->在jsfiddle.net上停止执行。
警报(“正常”);//5
。所以乍一看,数组值和属性值基本相同。但是数组可以用.push(value)命令扩展,而属性不能
我的Show函数同时适用于数组和对象,这是巧合吗
事实上,正如我写这篇文章并研究这个主题时所说的,是不是所有的数组都是对象,而不是所有的对象都是数组?那么Show()中的“for…in”
循环是否根据发送的对象类型而实际工作不同呢
任何澄清这一点的帮助都将不胜感激。谢谢
所以乍一看,数组值和属性值基本相同
数组条目和对象属性实际上是一样的,因为JavaScript的标准数组,它们只是具有一些附加特性的对象。其中两个功能是特殊的length
属性和push
功能,这就是为什么您看不到带有A2
的功能
你对括号表示法的观察特别准确。在JavaScript中,可以使用括号表示法和字符串访问对象属性,如下所示:
var o = {answer: 42};
console.log(o['answer']); // 42
var a = ['zero']; // An array with one entry
a.answer = 42; // We've added a property to the object that isn't an array entry
console.log(a.length); // 1, because `length` only relates to array "indexes" as
// defined by the specification
var key;
for (key in a) {
console.log(key + "=" + value);
}
// Shows (in *no reliable order*):
// 0=zero
// answer=42
众所周知,这正是使用数组“索引”时所做的操作:
我们与a[1]
一起使用的1
,从技术上讲,根据规范,被强制为字符串(a[“1”]
),然后该属性名称用于查找对象上的属性
那么,Show()中的for…in循环是否根据发送的对象类型实际工作不同呢
否,中的对所有对象的作用相同。它迭代对象的可枚举属性的名称。无论您使用的是数组还是任何其他对象都无关紧要
请注意,并非所有属性都是可枚举的。例如,Array#length
不是,也不是Array#push
或Object#toString
或对象的任何其他内置属性
但例如,您可以看到,对于in
中的,数组与其他类似对象的是相同的:
var o = {answer: 42};
console.log(o['answer']); // 42
var a = ['zero']; // An array with one entry
a.answer = 42; // We've added a property to the object that isn't an array entry
console.log(a.length); // 1, because `length` only relates to array "indexes" as
// defined by the specification
var key;
for (key in a) {
console.log(key + "=" + value);
}
// Shows (in *no reliable order*):
// 0=zero
// answer=42
有关中的的更多信息:
- (在我的博客上)
嗯……也许这篇文章也会让你对@bjb568有所了解——但他们的网站太漂亮了!前几天我看到了这个网站的参考资料,但今天读了。我听到他们说有不准确的地方,但当我点击备选方案时,他们似乎是高级用户的目标,而且他们似乎更难从中获得信息。谢谢你的提醒。@icanc——这是一个有用的链接。谢谢@kdtop真的那么难理解吗?答案很好。谢谢