再聊聊数组字面以及遇到的坑
6.数组字面量
==========
**知识点**
1.创建数组的方式
2.Array()函数的坑
---------------------------------------------------
1.创建数组的方式
--------------
- 构造函数: Array()
- 字面量: [...]
---------------------------------------------------
2.Array()函数的坑
----------------
- 单值元素
- 类型判断
---------------------------------------------------
### 示例代码: code/demo05.html
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>数组字面量</title>
</head>
<body>
<script>
//1.创建数组的二种方式: 构造函数和字面量
var arr1= new Array(1,2,3); // new 构造函数
var arr2 = Array('a','b','c'); // new 可以省略
var arr3 = [10,20,30]; // 字面量
// 以上三种语法,你最喜欢哪个呢?显示字面量最简洁,直观
// 为什么不推荐构造函数呢, 这里有二个大坑
// 1. 第一坑: 单值问题
var arr4 = new Array(3);
// 实际上会创建三个元素的空数组
console.log(arr4.length); // 3
console.log(arr4[0]); // 每一个都是: undefined
// 那如何创建数组呢?
var arr5 = new Array(0); // 长度为0的数组
arr5.push('html'); // push()
arr5[0] = 'css'; // 直接用索引
// 是不是相当麻烦呢?
// 字面量就非常的简单
var arr6 = [10];
console.log(arr6);
// 2. 第二坑: 类型检测
console.log(typeof arr1);
console.log(typeof arr2);
console.log(typeof arr3);
console.log(typeof arr4);
console.log(typeof arr5);
console.log(typeof arr6);
//你会发现,统统都是一种类型: Object ,对象多了去了,具体是哪个对象呢?
console.log( arr1.hasOwnProperty('length')); // 判断是否存在某个数组属性
// 事实这个方法也可靠,因为一些对象也会存在这个属性,例如 arguments对象就是length
// 你可能想到了: instanceof 来判断是否是Array构造函数的实例
console.log(arr2 instanceof Array);
// 看上去似乎可以,但是别忘了了这个世界上有一种叫做IE的浏览器,会出问题,不过好消息是,
// 微软打算放弃IE浏览器, 最新的基于Chrome内核开发, 全球前端开发人员的估计要笑哭了
// 还好, JS官方, ES5标准,提供一个方法: Array.isArray()来检测数组,这是最安全的
console.log(Array.isArray(arr3));
</script>
</body>
</html>
```