我最近一直在学习一些javascript,发现你可以像这样在数组中存储不同的数据类型:
var myArray = [12, 23.5, "hello", true];
我有一些Java背景,这在Java中是不可能的,因为你必须声明数据类型,否则你会得到一个错误(int myArray = blah blah blah
)
我的问题是,在什么情况下你会用this来代替宾语。举个例子就好了。谢谢。
在任何非强类型语言中都是如此。数组成员可以是不同的原语,也可以是对象。在大多数情况下,您不会想要使用这种方法,因为您的数组没有明确的结构。您更希望有这样的内容:
var data = {
prop: 12,
otherProp: 24.5,
stringProp: "hello",
boolProp: true
};
虽然可以在数组中存储不同的数据类型,但它被认为是较差的编程风格,因为array根据定义是同构数据结构。
如何以统一的方式处理这样的数组:
[ 2.5 , [ 1, 2 ], ["a", "b", "c"], {min: 2, max: 5} ]
- 排序
- 序列化
- 内存利用率
- 算法,即最大值
在数组中有不同的类型似乎不太自然,不是吗?
据我所知,在JavaScript中,将不同类型的值存储在同一个数组中并没有真正的规则或特定情况集被认为是最佳实践。这是可能的,因为JavaScript是动态类型的。我认为除此之外没有别的原因了。
这样做是最佳实践吗?恕我直言,我不这么认为。我认为Java(我提到Java是因为你说你有一些背景)限制数组数据类型的原因(就像许多语言一样)部分是因为它更干净,分离关注点。我认为将JavaScript中的变量/其他对象限制为一种数据类型通常是一个好主意,而不管动态类型的"能力"如何。
编辑
Jonathan Lonowski指出一个好的应用是在Function.prototype.apply
中,这是有意义的。这是因为你可以传入一个数据数组,所有的数据都可能有不同的类型。这种情况下,JavaScript在数组等对象中使用动态类型是有意义的
实际上,这在Java中是可能的,您必须声明:
Object[] prove = {1, "hi"};
在Javascript中也是一样,一个对象数组。
Javascript将数组视为对象,即:数组是Javascript中特殊类型的对象
但不同的是javascript中的对象使用名称来访问元素
1: var PM = {firstName:"Narendra", lastName:"Modi", age:70};
2: PM.firstName returns Narendra.
但是javascript数组编号索引。
1: var fruits = ["Banana", "Orange", "Apple", "Mango"];
2: fruits[2] returns Apple.
通过使用集合,我们也可以在JAVA中类似于Javascript的数组属性。也就是说,通过使用java中的List,你可以在数组中存储不同的数据类型,例如:arraylist.