博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript基础数组的字面声名法(010)
阅读量:5840 次
发布时间:2019-06-18

本文共 1759 字,大约阅读时间需要 5 分钟。

1.两种方法的对比

数组在JavaScript中,就像大多数的其它语言 一样,是对象。我们可以使用JavaScript内置的数组构造函数Array()来创建数组。就象对象的字面声名法一样,数组也可以采用字面法来声名。 而且我们建议使用数组的字面声名法。下面来看看这两种创建数组的方法:
// array of three elements// warning: antipatternvar a = new Array("itsy", "bitsy", "spider");// the exact same arrayvar a = ["itsy", "bitsy", "spider"];console.log(typeof a); // "object", because arrays are objectsconsole.log(a.constructor === Array); // true

如上代码,采用字面的声名法来声名数组时,数组就是一组放在方括号中的数据,里面的数据元素可以是任意的数据类型,包括对象。字面的声名法更直观,更优雅,也更简洁,没有必要,也就应该用new Array()来创建数组。

2. 内置的数组构造函数中的陷阱
远 离内置的数组构造函数的原因并不只是上面列举的那些。这个”免费的“的内置构造函数有着许多让人意想不到的问题。比如,如果只传入一个整数作为参数,它并 不把这个整数作为第一个数据元素,而是用它来设置数组的长度 。如:new Array(3) 创建的是一个长度为3的数组,接下来如果你尝试读取第一个数据元素,你得到的将是undefined

// an array of one elementvar a = [3];console.log(a.length); // 1console.log(a[0]); // 3// an array of three elementsvar a = new Array(3);console.log(a.length); // 3console.log(typeof a[0]); // "undefined"

 仅仅传递一个整数作为内置数组的构造函数作为参数,其结果有些恶心但还可以理解,但当你传递一个浮点数作为参数时,事情变得更糟糕了:

// using array literalvar a = [3.14];console.log(a[0]); // 3.14var a = new Array(3.14); // RangeError: invalid array lengthconsole.log(typeof a); // "undefined"

 

3. 判断一个对象是不是数组

对数组使用typeof操作符,返回的是"object"。虽然数组是个对象,但这个结果显然并不太有用:

console.log(typeof [1, 2]); // "object"

 在ECMAScript 5中JavaScript有一个全新的方法检查一个对象到底是不是数据:使用 Array.isArray()。它可不是好骗的:

Array.isArray([]); // true// trying to fool the check// with an array-like objectArray.isArray({    length: 1,    "0": 1,    slice: function () {}}); // false

 在ExtJS框架里也有类似的方法:Ext.isArray()。如果你的代码的执行环境不支持ECMAScript 5,也没有其它框架,也可以使用下面的方法来验证数组对象:

if (typeof Array.isArray === "undefined") {    Array.isArray = function (arg) {        return Object.prototype.toString.call(arg) === "[object Array]";    };}

 

转载于:https://www.cnblogs.com/Bryran/p/3969113.html

你可能感兴趣的文章
关于顺丰三方应用接口对接方法
查看>>
Angular5小结--组件交互
查看>>
nginx rails 详细站点配置入门教程
查看>>
toUpperCase转大写 toLowerCase转小写
查看>>
创建boot项目报错 connect timed out
查看>>
人工智能当道,你离失业还有多远
查看>>
云计算+物联网的前景更加诱人
查看>>
MYSQL和ORACLE的一些区别
查看>>
Java_HashMap与HashTable的区别
查看>>
java 通过request.getHeader("user-agent")解析浏览器
查看>>
java 多线程基础(二)
查看>>
Spark采坑系列(二)使用Scala编写的工程Maven打包没有Scala文件
查看>>
关于Js执行块级作用域问题
查看>>
使用Xtrabackup对MySQL做主从复制
查看>>
相对和绝对路径、cd、rm命令
查看>>
11.29 限制user_agent
查看>>
用户配置文件和密码配置文件,用户和用户组的管理
查看>>
PXE/kickstart网络装机
查看>>
Java反射机制详解
查看>>
《前方的路 - 阮一峰》系列分享专栏
查看>>