《javascript语言精粹》学习笔记1

作为一个前端的学习者,之前由于时间赶且懒的特性,没有好好的学习一下js的特性,只看了w3cschool的基础教程,知道语法后就用起了jQuery框架,js的很多基础完全没有接触理解。
这段时间了解到,js基础还是要好好学,对以后找工开发都有好处。

进入正题,一下大部分是书上的东西,只是想看过一遍后,自己再过一遍加深理解。

第一章是说明js的背景,略。

第二章是js基础语法,略之。

第三章讲对象。

1.数据类型

首先应该明确的是js的数据类型,包括简单数据类型(数字,字符串,布尔值,null值,undefined值),对象(数组,函数,正则表达式,对象)。简单数据对象拥有方法,但是不可变。对象是属性的容器,每个属性拥有属性和值。

2.对象字面量

对象的定义使用花括号

<!-- lang: js -->
var stooge = {"first_name":"Jerome","last_name":"Howard"};

3.检索

访问对象可以通过两种方式,优先考虑.的表示方法,因为紧凑,可读性好

<!-- lang: js -->
stooge["first_name"];
stooge.first_name;

4.更新

通过赋值语句来更新。如果之前没那个对象名,就会直接扩充到已有对象中。

<!-- lang: js -->
stooge["first_name"] = "gao"
stooge.first_name = "gao";

5.引用

对象通过引用来传递,他们永远不会被复制。

<!-- lang: js -->
var a = {};var b = {};var c = {};//这是3个不同的空对象
var a = b = c = {};//a,b,c都引用同一个对象

6.原型

每个对象对连接到一个原型对象,并且它可以从中继承属性,所有通过对象字面量创建的对象都连接到Object .prototype。
原型连接在更新值的时候是不会更改到该对象的原型的,原型连接只有在检索值的时候才会被用到,当我们尝试去获取对象的属性值的时候,如果没有,js会试着从原型对象中获取属性值。如果没有,再从它的原型找,直到到达终点Object.prototype。如果还是不存在于原型链中,则返回undefined。这个过程叫委托

<!-- lang: js -->
var flight.equipment = {
    airline:"Oceanic",
    number:815,
    departure:{
        IATA:"SYD",
        time:"2004-09-22 14:55",
        city:"Sydney"
    },
    arrivak:{
        IATA:"LAX",
        time:"2004-09-23 10:42",
        city:"Sydney"
    }
};

if(typeof Object.beget !== 'function') {
    Object.create = function (o) {
        var F = function () {};
        F.prototype = o;
        return  new F();
    };
}
var another_flight = Object.create(flight);
another_flight['airline'];//"Oceanic"
flight.id = 10086;
another_flight['id'];//10086

7.反射

检查对象并确定对象有什么属性

<!-- lang: js -->
typeof flight.number;//"number"
typeof flight.status;//"undefined"
typeof flight.id;//"number"

hasOwnProperty方法则不会检查原型链

<!-- lang: js -->
flight.hasOwnProperty('number');//true
another_flight.hasOwnProperty('number');//false

8.枚举

使用 for in 语句,可用hasOwnProperty方法做过滤器,以及typeof来排除函数。
属性名的出现顺序是不确定的,可以先把知道的属性名保存在一个数组中,顺寻排好,然后通过一个循环得到按照顺序排列的属性值。

<!-- lang: js -->
var i;
var properties = {'airline','number','departure','arrivak'};
for (i = 0;i < properties.length; i += 1){
    document.writeln(properties[i] + ':' + another_flight[properties[i]]);
}
//airline:Oceanic number:815 departure:[object Object] arrivak:[object Object]

9.删除

删除对象的属性可能会让来自原型链中的属性透露出来

<!-- lang: js -->
another_flight.number = 1000;
another_flight.number;    //1000
delete another_flight.number;
another_flight.number;//815

10.减少全局变量污染

最小化使用全局变量的方法之一就是为应用只创建一个唯一的全局变量

<!-- lang: js -->
var MYAPP = {};
MYAPP.stooge = {
    "id":10101,
    "number":1038
}

此时,该变量变成了应用的容器。

你可能感兴趣的:(《javascript语言精粹》学习笔记1)