JavaScript学习笔记(六) 数组字面量和Array()构造方法

数组字面量(Array Literal)

在JavaScript中数组是一个对象,就像其它语言一样;
数组可以通过内置的Array()构造函数创建,但也有字面量语法去创建,和对象字面量差不多,数组字面量简单并且应该优先使用。

下面我们用两种不同的方式——相同的数据——创建两个数组,使用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

数组字面量语法(Array Literal Syntax)

数组字面量语法没有非常简单,就是逗号分隔的元素的集合,并且整个集合被方括号包围;
你可以给数组元素赋任何值,包括对象或其它数组;

数组字面量语法简单,直接,优雅;毕竟,数组就是一个下标从零开始的元素的集合;
没有必要去使用new去调用Array()构造方法,减少代码。

Array构造方法的不寻常(Array Constructor Curiousness)

还有一个远离new Array()的原因就是防止中了Array()构造方法为你准备的陷阱。
当你给Array()构造函数传递一个简单的整数时,它不会成为数组的第一个元素的值,而被用来设置数组的长度;
这意味着new Array(3)会创建一个数组长度为3的数组,但没有实际的元素;
如果你尝试去访问任何一个元素,你得到的是undefined,因为元素根本都不存在;
下面这段代码会展示使用Array()构造方法和字面量的不同之处:
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"
在程序运行的时候创建动态数组的时候,为了防止这种潜在的错误,更安全的是做法是使用数组字面量模式。

判断数组(Check for Array-ness)

对数组使用typeof操作符会返回“object”;
console.log(typeof [1, 2]); // "object"
虽然这样的行为说的过去(数组也是对象),但没有多少用;
你经常需要知道一个值到底是不是一个数组,有时候你可以检查length属性的状态或者一些数组方法来判断对象是不是数组;
但这样检查不是很好,因为没有理由其他非数组对象不能有同名的属性和方法;
也有人用instanceof Array,但在IE中有些情况下也不能正常工作;
ECMAScript 5 定义了一个新方法 Array.isArrya(),如何参数是个数组,它会返回true;
Array.isArray([]); // true
// trying to fool the check
// with an array-like object
Array.isArray({
    length: 1,
    "0": 1,
    slice: function() {}
}); // false
如果这个新方法在你的环境中是无法访问的,你可以调用Object.prototype.toString()方法来判断;
如果你使用数组作为参数调用toString的call()方法,它会返回“[object Array]”;
如果使用对象作为参数,它应该会返回“[object Object]”;
所以我们可以这样:
if (typeof Array.isArray === "undefined") {
    Array.isArray = function(arg) {
        return Object.prototype.toString.call(arg) === "[object Array]";
    };
}
















展开阅读全文

Git 实用技巧

11-24
这几年越来越多的开发团队使用了Git,掌握Git的使用已经越来越重要,已经是一个开发者必备的一项技能;但很多人在刚开始学习Git的时候会遇到很多疑问,比如之前使用过SVN的开发者想不通Git提交代码为什么需要先commit然后再去push,而不是一条命令一次性搞定; 更多的开发者对Git已经入门,不过在遇到一些代码冲突、需要恢复Git代码时候就不知所措,这个时候哪些对 Git掌握得比较好的少数人,就像团队中的神一样,在队友遇到 Git 相关的问题的时候用各种流利的操作来帮助队友于水火。 我去年刚加入新团队,发现一些同事对Git的常规操作没太大问题,但对Git的理解还是比较生疏,比如说分支和分支之间的关联关系、合并代码时候的冲突解决、提交代码前未拉取新代码导致冲突问题的处理等,我在协助处理这些问题的时候也记录各种问题的解决办法,希望整理后通过教程帮助到更多对Git操作进阶的开发者。 本期教程学习方法分为“掌握基础——稳步进阶——熟悉协作”三个层次。从掌握基础的 Git的推送和拉取开始,以案例进行演示,分析每一个步骤的操作方式和原理,从理解Git 工具的操作到学会代码存储结构、演示不同场景下Git遇到问题的不同处理方案。循序渐进让同学们掌握Git工具在团队协作中的整体协作流程。 在教程中会通过大案例进行分析,案例会模拟在工作中遇到的问题,从最基础的代码提交和拉取、代码冲突解决、代码仓库的数据维护、Git服务端搭建等。为了让同学们容易理解,对Git简单易懂,文章中详细记录了详细的操作步骤,提供大演示截图和解析。在教程的最后部分,会从提升团队整体效率的角度对Git工具进行讲解,包括规范操作、Gitlab的搭建、钩子事件的应用等。 为了让同学们可以利用碎片化时间来灵活学习,在教程文章中大程度降低了上下文的依赖,让大家可以在工作之余进行学习与实战,并同时掌握里面涉及的Git不常见操作的相关知识,理解Git工具在工作遇到的问题解决思路和方法,相信一定会对大家的前端技能进阶大有帮助。
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值