js高级第三版(第三章 基本概念 )一

3.1 语法

    3.1.1 区分大小写

    要理解的第一个概念就是 ECMAScript 中的一切(变量、函数名和操作符)都区分大小写。

    3.1.2 标识符

    所谓标识符,就是指变量、函数、属性的名字,或者函数的参数。

    规则:

    第一个字符必须是一个字母、下划线(_)或一个美元符号($);

    其他字符可以是字母、下划线、美元符号或数字。

    3.1.3 注释   

    // 单行注释
    /*
    * 这是一个多行   
    * (块级)注释
    */

     多行注释(块级注释)第二行和第三行的星号可以省略掉。

    3.1.4 严格模式

    ECMAScript 5 引入了严格模式(strict mode)的概念。

    要在整个脚本中启用严格模式,可以在顶部添加如下代码:

    "use strict";

    它是一个编译指示(pragma),用于告诉支持的 JavaScript 引擎切换到严格模式。

    支持严格模式的浏览器包括 IE10+、Firefox 4+、Safari 5.1+、Opera 12+和 Chrome。

    3.1.5 语句

    ECMAScript 中的语句以一个分号结尾;如果省略分号,则由解析器确定语句的结尾,

    3.2 关键字和保留字

    ECMA-262 描述了一组具有特定用途的关键字

    break do instanceof typeof case else new var catch finally return void  continue for switch while

    debugger* function this with  default if throw  delete in try

    ECMA-262 还描述了另外一组不能用作标识符的保留字。

    abstract enum int short boolean export interface static byte extends long super char final native synchronized class     float package throws const goto private transient debugger implements protected volatile double import public

    第 5 版把在非严格模式下运行时的保留字缩减为下列这些:

    class enum extends super const export import

    在严格模式下,第 5 版还对以下保留字施加了限制:

    implements package public interface private static let protected yield

    3.3 变量

    ECMAScript 的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。    

function test(){
 message = "hi"; // 全局变量
 //var message = "hi"; // 局部变量
}
test();
alert(message); // "hi" 

    注:虽然省略 var 操作符可以定义全局变量,但这也不是我们推荐的做法。因为在局部作用域中定义的全局变量很难维护,而且如果有意地忽略了 var 操作符,也会由于相应变量不会马上就有定义而导致不必要的混乱。给未经声明的变量赋值在严格模式下会导致抛出 ReferenceError 错误。

    可以使用一条语句定义多个变量,只要像下面这样把每个变量(初始化或不初始化均可)用逗号分隔开即可。    

var a=1,
    b=2,
    c=4;

    3.4 数据类型

    ECMAScript 中有 5 种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number和 String。

    还有 1种复杂数据类型——Object,Object 本质上是由一组无序的名值对组成的。

    3.4.1 typeof操作符

     "undefined"——如果这个值未定义;

     "boolean"——如果这个值是布尔值;

     "string"——如果这个值是字符串;

     "number"——如果这个值是数值;

     "object"——如果这个值是对象或 null;

     "function"——如果这个值是函数。

    从技术角度讲,函数在 ECMAScript 中是对象,不是一种数据类型。然而,函数也确实有一些特殊的属性,因此通过 typeof 操作符来区分函数和其他对象是有必要的。

    3.4.2 Undefined类型

    Undefined 类型只有一个值,即特殊的 undefined。在使用 var 声明变量但未对其加以初始化时,这个变量的值就是 undefined。

    3.4.3 Null类型

    Null 类型是第二个只有一个值的数据类型,这个特殊的值是 null。从逻辑角度来看,null 值表示一个空对象指针,而这也正是使用 typeof 操作符检测 null 值时会返回"object"的原因。

    位于 null 和 undefined 之间的相等操作符(==)总是返回 true。

    如:alert(null == undefined); //true

    3.4.4 Boolean类型

    Boolean 类型是 ECMAScript 中使用得最多的一种类型,该类型只有两个字面值:true 和 false。

    这两个值与数字值不是一回事,因此 true 不一定等于 1,而 false 也不一定等于 0。

     如:String中true是任意非空字符,false是“”(空字符串)

            Number中true是任何非零数字值(包括无穷大),false是0和NaN

            Object中true是任何对象,false是null

            Undefined中true是n/a,false是Undefined。

    3.4.5 Number类型

    Number 类型使用 IEEE754 格式来表示整数和浮点数值(浮点数值在某些语言中也被称为双精度数值)。为支持各种数值类型,ECMA-262 定义了不同的数值字面量格式。

    var intNum = 55; // 整数(十进制)

    var octalNum1 = 070; // 八进制的 56

    var octalNum2 = 079; // 无效的八进制数值——解析为 79

    var octalNum3 = 08; // 无效的八进制数值——解析为 8

    var hexNum1 = 0xA; // 十六进制的 10

    var hexNum2 = 0x1f; // 十六进制的 31

    1. 浮点数值

    var floatNum3 = .1; // 有效,但不推荐

    var floatNum = 3.125e7; // 等于 31250000

    2. 数值范围

    最小值:Number.MIN_VALUE 中——在大多数浏览器中,这个值是 5e-324;

    最大值:Number.MAX_VALUE 中——在大多数浏览器中,这个值是 1.7976931348623157e+308。

    3. NaN

    NaN,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。

    4. 数值转换

    Number()函数的转换规则如下。

     如果是 Boolean 值,true 和 false 将分别被转换为 1 和 0。

     如果是数字值,只是简单的传入和返回。

     如果是 null 值,返回 0。

     如果是 undefined,返回 NaN。

     如果是字符串,遵循下列规则:

          如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即"1"会变成 1,"123"会变成 123,而"011"会变成 11(注意:前导的零被忽略了);

          如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值(同样,也会忽略前导零);

          如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整数值;

          如果字符串是空的(不包含任何字符),则将其转换为 0;

          如果字符串中包含除上述格式之外的字符,则将其转换为 NaN。

     如果是对象,则调用对象的 valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是 NaN,则调用对象的 toString()方法,然后再次依照前面的规则转换返回的字符串值。

    3.4.6 String类型

    String 类型用于表示由零或多个 16 位 Unicode 字符组成的字符序列,即字符串。字符串可以由双引号(")或单引号(')表示。

    1. 字符字面量

    \n 换行

    \t 制表

    \b 空格

    \r 回车

    \f 进纸

    \\ 斜杠

    \' 单引号('),在用单引号表示的字符串中使用。例如:'He said, \'hey.\''

    \" 双引号("),在用双引号表示的字符串中使用。例如:"He said, \"hey.\""

    \xnn 以十六进制代码nn表示的一个字符(其中n为0~F)。例如,\x41表示"A"

    \unnnn 以十六进制代码nnnn表示的一个Unicode字符(其中n为0~F)。例如,\u03a3表示希腊字符Σ

    2. 字符串的特点

    ECMAScript 中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。

    3. 转换为字符串

    String()函数遵循下列转换规则:

     如果值有 toString()方法,则调用该方法(没有参数)并返回相应的结果;

     如果值是 null,则返回"null";

     如果值是 undefined,则返回"undefined"。

    3.4.7 Object类型

    ECMAScript 中的对象其实就是一组数据和功能的集合。对象可以通过执行 new 操作符后跟要创建的对象类型的名称来创建。而创建 Object 类型的实例并为其添加属性和(或)方法,就可以创建自定义对象。

    Object 的每个实例都具有下列属性和方法。

     constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)就是 Object()。

     hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例如:o.hasOwnProperty("name"))。

     isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型(第 5 章将讨论原型)。

     propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用 for-in 语句(本章后面将会讨论)来枚举。与 hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定。

     toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。

     toString():返回对象的字符串表示。

     valueOf():返回对象的字符串、数值或布尔值表示。通常与 toString()方法的返回值相同。

    由于在 ECMAScript 中 Object 是所有对象的基础,因此所有对象都具有这些基本的属性和方法。

猜你喜欢

转载自blog.csdn.net/lugr_shx/article/details/80739650