1.两种方法的对比

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

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

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

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

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

// using array literal
var a = [3.14];
console.log(a[0]); // 3.14 var a = new Array(3.14); // RangeError: invalid array length
console.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 object
Array.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]";
};
}

JavaScript基础数组的字面声名法(010)的更多相关文章

  1. JavaScript基础正则表达式的字面声明(012)

    不出所料,正则表达式也是JavaScript的一种对象.构造正则表达式也有两种,一种是使用JavaScript内置的 new RegExp() 构造函数,另一种是我们推荐的字面声明方式: // reg ...

  2. JavaScript基础-----数组(Array)

    1.JavaScript 中创建数组的方法: (1).使用Array构造函数: var arr = new Array(); //创建一个空数组 var arr = new Array(5); //传 ...

  3. JavaScript基础------数组

    数组1.数组的每个元素都可以保存任意类型数据2.数组长度可以随之调整创建数组的2种方式 1.使用Array构造函数 语法 new Array() 小括号()说明: (1)预先知道数组要保存的项目的数量 ...

  4. JavaScript 基础数组循环和迭代的几种方法

    JavaScript 数组循环和迭代   (之前一直没怎么注意数组循环,今天做一道题时,用到forEach循环发现它并没有按照我想象的样子执行,总结一下数组循环) 一.第一种方法就是for()循环   ...

  5. JavaScript基础——数组

    一 .数组的介绍 1.概念:数据的集合,任何数据都可以放在数组中 2.作用:可以同时操作多个数据 3.数组的创建: 字面量:var arr = [ ]; 构造函数:var arr = new Arra ...

  6. Javascript 基础--数组

    一.一维数组 1.一维数组 var weights = [3,5,1,3.4,2,50]; var all_weight=0; var avg_weight=0; for(var i=0;i<w ...

  7. JavaScript基础数组_布尔值_逻辑运算等(2)

    day51 参考:https://www.cnblogs.com/liwenzhou/p/8004649.html 布尔值(Boolean) 区别于Python,true和false都是小写. var ...

  8. JavaScript基础Literal 与 Constructor(008)

    JavaScript支持以字面声名法(Literal)的方式来声名对象和数组,相对于构造函数(constructor)的方式,Literal的声 名方式更简洁,更易读,也更少导致Bug.事实上,JSO ...

  9. JavaScript基础插曲—元素样式,正则表达式,全局模式,提取数组

    JavaScript基础学习 学习js的基础很重要,可以让自己有更多的技能.我相信这个以后就会用到. Eg:点击选择框,在div中显示出选择的数量 window.onload = function() ...

随机推荐

  1. background-color的覆盖范围

    1. 一般div的background-color覆盖范围 到 border,margin的颜色由外层元素决定 2. body的background-color覆盖范围 到 margin,但 当htm ...

  2. Java实现 LeetCode 566 重塑矩阵(遍历矩阵)

    566. 重塑矩阵 在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据. 给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表 ...

  3. Java实现 蓝桥杯 历届试题 核桃的数量

    历届试题 核桃的数量 时间限制:1.0s 内存限制:256.0MB 问题描述 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑).他的 ...

  4. Java实现 LeetCode 117 填充每个节点的下一个右侧节点指针 II(二)

    117. 填充每个节点的下一个右侧节点指针 II 给定一个二叉树 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每 ...

  5. Java实现 LeetCode 96 不同的二叉搜索树

    96. 不同的二叉搜索树 给定一个整数 n,求以 1 - n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 ...

  6. JavaScript实现html购物车代码

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. java实现第六届蓝桥杯三羊献瑞

    三羊献瑞 题目描述 观察下面的加法算式: 祥 瑞 生 辉 三 羊 献 瑞 三 羊 生 瑞 气 (如果有对齐问题,可以参看[图1.jpg]) 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字. ...

  8. ArrayDeque使用&实现原理分析

    ArrayDeque使用&实现原理分析 学习Okhttp实现源码时,发现其任务分发时用到了ArrayDeque.因此了解一下ArrayDeque的使用方式和实现原理. 一.Deque dequ ...

  9. tensorflow2.0学习笔记第一章第二节

    1.2常用函数 本节目标:掌握在建立和操作神经网络过程中常用的函数 # 常用函数 import tensorflow as tf import numpy as np # 强制Tensor的数据类型转 ...

  10. 构造函数继承与class继承

    构造函数继承 1.子类通过apply方法或者call方法把this指向父类 js代码 function Parent(name, age) { this.name = name this.age = ...