ES5知识点整理

基本语法

基本语法包括数据类型,操作符,语句,函数

数据类型

5种简单数据类型(基本数据类型)Undefined、Null、Boolean、Number、String

和一种复杂数据类型Object,是所有对象的基础

typeof 操作符检定给定变量的数据类型

JavaScript不区分整数和浮点,Number类型可用于保存所有数值

操作符

常用 : 算数操作符,布尔操作符,赋值操作符

布尔操作符:与或非 && || !

控制语句

常用 : if语句 for语句 switch语句

函数

函数用来封装多条语句

函数可以在任何时候返回任何值

函数的参数以数组形式传递,可以接受任意参数,可以通过arguments对象来访问这些参数。

变量和作用域

JavaScript包含基本类性值和引用类型值。

基本类型在内存中是实际的值,引用类型在内存中就是一个指针,指向一个对象,多个引用类型可能同时指向同一个对象。

检测基本类型用typeof 检测对象类型使用instanceof

所有变量都存在与作用域当中,作用域决定了变量的生命周期。

函数的局部环境有权访问函数作用域中的变量和父环境到全局变量

JavaScript没有块级作用域

引用类型

Object : 基础类型,其它所有类型都从Object继承

Array : 数组类型,每一项可以保存任何数据

转换方法 栈方法 队列方法 重排序方法 操作方法 位置方法 迭代方法 归并方法

Date : 日期类型

RexExp : 正则表达式

面对对象程序设计

创建自定义类型最常见的方式是组合使用构造函数模式与原型模式,构造函数模式用于定义实例属性,原型模式用于定义方法和共享的属性。

// 构造函数
function Person(name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.friends = ["Shelby", "Court"];

}
// 原型
Person.prototype = {
    constructor: Person,
    sayName: function() {
        return this.name;
    }
}
// 实例化
var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");

person1.friends.push("Van");
alert(person1.friends);                     //输出"Shelby,Count,Van"
alert(person2.friends);                     //输出"Shelby,Count"
alert(person1.friends === person2.friends);        //输出false
alert(person1.sayName === person2.sayName);        //输出true

继承

原型链是实现继承的主要方法

将父类实例赋值给子类构造函数的原型

// 父类
function SuperType() {
    this.property = true;
}
SuperType.prototype.getSuperValue = function() {
    return this.property;
};

// 子类
function SubType() {
    this.subproperty = false;
}

SubType.prototype = new SuperType();

//给子类添加新方法
SubType.prototype.getSubValue = function() {
    return this.subproperty;
};
//重写父类的方法
SubType.prototype.getSuperValue = function() {
    return false;
};

// 实例化
var instance = new SubType();
console.log(instance.getSuperValue()); //输出false

函数表达式

执行代码之前会先读取函数声明

递归

函数表达式递归

var factorial = (function f(num) {
    if (num <= 1) {
        return 1;
    } else {
        return num * f(num - 1);
    }
});
var anotherfactorial=factorial

factorial=null

console.log(anotherfactorial(3))    //输出6

闭包

一个函数可以访问另一个函数作用域中的变量,那么前者就叫做闭包。

创建闭包最常见的方式就是在函数内部创建函数

闭包可以封装变量或者模拟块级作用域

闭包的缺陷:

function createFunctions () {

var result = new Array()

for (var i=0 ; i<10 ; i++) {

    result[i] = function() {

        return i
    }
}
return result
}
//想要的效果是每个函数都返回自己的索引值,但实际上每个函数都返回10

//本质是子函数对父函数的引用是父函数运行结束之后的状态,要使用运行时候的状态就应该在加上自执行

function createFunctions {

var result= new Array();

for (var i = 0; i < 10; i++) {

    result[i] = function(num) {

        return function() {

            return num;
        };
    }(i);
}
return num;
}

封装

JavaScript并没有块级作用域的概念,只有全局作用域和函数作用域,那么如果想要创建块级作用域的话,我们可以通过闭包来模拟。

创建并立即调用一个函数,就可以封装一个块级作用域。该函数可以立即执行其中的代码,内部变量执行结束就会被立即销毁。

function outputNumbers(count) {

(function() {
    for (var i = 0; i < count; i++) {
        alert(i);
    }
})();
// i在外部不可用,便有了类似块级作用域
alert(i); //报错
}

静态私有变量

(function() {
//私有变量和私有函数

var privateVariable = 10;

function privateFunction() {

    return false;

}

//构造函数

MyObject = function() {};

//公有/特权方法

MyObject.prototype.publicMethod = function() {

    privateVariable++;

    return privateFunction();

};

需要注意的是,这个模式在定义构造函数时没有使用函数声明,在严格模式下会导致错误

总结

以上是我从《JavaScript高级程序设计》阅读后的总结,并不是我想象中的高级设计,完全是ES5跳坑指南啊( `д′)

最近刚开始看ES6,越来越嫌弃ES5了,闭个毛线包啊,立即执行毛线啊,let不好吗!

(ノಠ益ಠ)ノ彡┻━┻

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容