09 特殊函数
匿名函数JavaScript 可以将函数作为数据使用。作为函数本体,它像普通的数据一样,不一定要有名字。默认名字的函数被称之为匿名函数。 如下示例: 1function (a){return a;} 匿名函数的两种用法: 可以将匿名函数作为参数传递给其他函数。这样,接收方函数就能利用所传递的函数来完成某些事情。 可以定义某个匿名函数来执行某些一次性任务。 自调函数所谓自调函数就是在定义函数后自行调用。如下示例: 123(function(){ alert("javascript");})(); 上述代码的含义如下: 第一对括号,放置的是一个匿名函数。 第二对括号的作用,是“立即调用”。 自调函数只需将匿名函数的定义放进一对括号中,然后外面再跟一对括号即可。 自调函数也可以在调用时接收参数,如下示例: 123(function(name){ alert("hello " + name + "!");})("javascript"...
10 数据类型
在 JavaScript 代码中,能够表示并操作值的类型称之为数据类型。 数据类型可分为可变类型和不可变类型。可变类型的值是可修改的,对象和数据就属于可变类型;不可变类型的值是不可修改的,数字、布尔值、null 和 undefined 都属于不可变类型。 字符串可以看成由字符组成的数组,可能被误认为是可变的。但在 JavaScript 中,字符串的值是不可变的。 原始类型原始类型,又称为原始值,是直接代表 JavaScript 语言实现的最底层的数据。 原始类型分别为 boolean 类型、number 类型和 string 类型三种。当然,有些资料将undefined 和 null 也归为原始类型(这里表示为特殊类型)。 声明变量并初始化值为原始类型,一般称之为字面量方式定义变量,也可以称之为直接量方式定义变量。 boolean 类型布尔(boolean)类型是指真或假、开或关、是或否。这个类型只有两个值:true 和 false。 值得注意的是: 由于 JavaScript 是区分大小写的,布尔类型的 true 和 false 全部是小写。 JavaScript 也可以...
11 作用域
变量和函数都具有作用域。作用域就是变量和函数的可被访问的范围,控制着变量和函数的可见性和生命周期。 变量的作用域可被分为全局作用域和函数作用域(局部作用域)。如果变量是被定义在全局作用域的话,在 JavaScript 代码中的任何位置都可以访问该变量;如果变量是被定义在指定函数内部的话,在 JavaScript 代码中只能在该函数内访问该变量。 函数的作用域也可被分为全局作用域和函数作用域(局部作用域)。被定义在指定函数内部的函数被称之为局部函数或内部函数。 值得注意的是: ECMAScript 6 之前的 JavaScript 没有语句块作用域。 变量的作用域全局变量在所有函数之外声明的变量,叫做全局变量,因为它可被当前文档中的其他代码所访问。具体内容如下述代码所示: 12345678910var msg = "this is message";// 定义全局变量 msg// 在全局作用域访问变量 msgconsole.log( msg );// 输出 this is messagefunction fn(){ // 在函数作用域访问变量 ms...
12 对象
JavaScript 中的对象,和其它编程语言中的对象一样,可以比照现实生活中的对象来理解它。 JavaScript 中对象的概念可以比照着现实生活中实实在在的物体来理解。 在 JavaScript 中,一个对象可以是一个单独的拥有属性和类型的实体。拿它和一个杯子做下类比,一个杯子是一个对象,拥有属性。杯子有颜色、图案、重量等等。同样, JavaScript 对象也有属性来定义它的特征。 方法 是关联到某个对象的函数,或者简单地说,一个方法是一个值为某个函数的对象属性。定义方法就象定义普通的函数,除了它们必须被赋给对象的某个属性。 对象分类 内置对象/原生对象 就是 JavaScript 语言预定义的对象。在 ECMAScript 标准定义,由 JavaScript 解释器/引擎提供具体实现。 宿主对象 指的是 JavaScript 运行环境提供的对象。一般是由浏览器厂商提供实现(目前也有独立的 JavaScript 解释器/引擎提供实现),主要分为 BOM 和 DOM。 自定义对象 就是由开发人员自主创建的对象。 创建对象对象初始化器方式...
14 运算符
JavaScript 提供了一组用于操作数据值的运算符。 算数运算符(+ - * / % ++ –) 比较运算符(> >= < <= == != === !==) 逻辑运算符(&& || !) 赋值运算符(= += -= *= /= %= ) 字符串连接运算符(+) 三元运算符(? :) 特殊运算符(typeof instanceof delete) 算数运算符给定 A=20 B=10 条件,下述表格描述算数运算符: 运算符 描述 例子 + 两个运算数相加 A + B = 30 - 第一个运算数减去第二个运算数 A – B = 10 * 两个运算数相乘 A * B = 200 / 第一个运算数除以第二个运算数 A / B ...
15 继承
原型链构造函数或构造器具有 prototype 属性,对象具有 __proto__ 属性,这就是之前学习的原型。 如果构造函数或对象 A ,A 的原型指向构造函数或对象 B,B 的原型再指向构造函数或对象 C,以此类推,最终的构造函数或对象的原型指向 Object 的原型。由此形成一条链状结构,被称之为原型链。 按照上述的描述,在 B 中定义的属性或方法,可以直接在 A 中使用并不需要定义。这就是继承,它允许每个对象来访问其原型链上的任何属性或方法。 原型链是 ECMAScript 标准中指定的默认实现继承的方式。 原型链的示意结构图如下: 原型链实现继承1234567891011121314function A(){ this.name = "a"; this.toString = function(){return this.name};}function B(){ this.name = "b";}function C(){ this.name = "c...
18 原型
在 JavaScript 中,函数是一个包含属性和方法的 Function 类型的对象。而原型(Prototype)就是 Function 类型对象的一个属性。 在函数定义时就包含了 prototype 属性,它的初始值是一个空对象。在 JavaScript 中并没有定义函数的原型类型,所以原型可以是任何类型。 原型是用于保存对象的共享属性和方法的,原型的属性和方法并不会影响函数本身的属性和方法。 1234function foo(a,b){ return a + b;}console.log( typeof foo.prototype );// object 获取原型通过如下两种方式可以获取对象的原型,从而设置共享的属性和方法: 通过构造函数的 prototype 属性。 1234function Person() { console.log('Person instantiated');}console.log( Person.prototype ); 通过 Object 对象的 getPrototypeO...
16 闭包
作用域链很多开发语言中都具有块级作用域,但 JavaScript 中并没有跨级作用域,这经常会导致理解上的困惑。如下示例: 1234if( true ){ var color = "blue";}console.log( color );// blue 上述代码在 if 语句中定义了变量 color。但该变量的作用域是全局域,原因是 JavaScript 中没有块级作用域。 虽然 JavaScript 没有块级作用域,但具有函数作用域。在某个函数内部定义的变量的作用域就是该函数作用域。 1234function fun(){ var javascript = "this is javascript";}console.log( javascript );// 输出报错 上述代码在函数 fun 内部定义了变量 JavaScript,该变量的作用域是 fun 函数作用域。所以在全局域访问该变量时会出错。 每一段 JavaScript 代码(全局代码或函数)都有一个与之关联的作用域链。这个作用域链是一个...
17 json
JSON 全称为 JavaScript Object Notation,译为 JavaScript 对象表示法。是一种轻量级的数据交换格式。 官网地址: http://www.json.org/json-zh.html JSON 易于开发者阅读和编写,也易于计算机解析和生成。它基于JavaScript Programming Language,Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON 采用完全独立于语言的文本格式,被 Java、C#、C++、PHP、OC 等几乎所有主流语言所支持。 JSON 作为一种轻量级的文本数据交换格式,已被广泛使用于存储和交换文本数据领域。 语法规则JSON 构建于两种语法结构: “名称 / 值”对的集合。在 JavaScript 中被解释为 对象。 值的有序列表。在 JavaScript 中被解释为 数组。 JSON 存储数据的类型可以是字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这...
20 正则表达式
正则表达式(Regular Expression): 由一些普通字符和特殊字符组成的,用以描述一种特定的字符规则的表达式。 正则表达式常用于在一段文本中搜索、匹配或替换特定形式的文本。如: 词语出现频率统计、验证字符串是否符合邮箱格式、屏蔽一篇帖子中的限制性词语等。 创建正则表达式JavaScript 中没有正则表达式数据类型,创建正则表达式的语法如下: 1var expression = / pattern / attributes ; 参数: pattern 参数: 被称为模式,可以是任何简单或复杂的正则表达式,包含字符类、限定符、分组、向前查找以及反响引用等。 attributes 参数: 被称为修饰符,用于标明正则表达式的行为。 直接量字符正则表达式中的所有字母和数字都是按照字面含义进行匹配的。JavaScript 正则表达式语法也支持非字母的字符匹配,这些字符需要通过反斜线(\)作为前缀进行转义。 字符 匹配 字母和数字 自身 \0 匹配 NULL 字符,不要在这后面跟其它小数。 \t 匹配一个水平制表符。 \n 匹配一个换行符。 \...













