JavaScript高级程序设计(第3版)学习笔记 第3章

第3章 基本概念

1.语法

(1)ECMAScript中的一切(变量、函数名和操作符)都区分大小写。

(2)标志符指变量、函数、属性的名字:第一个字符必须是字母、_或$,其他字符可以是字母、_、$或数字,采用驼峰大小写格式。

(3)顶部添加代码"use strict"; 开启严格模式。

(4)最佳实践是始 终在控制语句中使用代码块——即使代码块中只有一条语句。

2.ECMAScript 的全部关键字:

breakdoinstanceof
typeof
caseelsenew

var

catchfinallyreturnvoid
continueforswitchwhile
debuggerfunctionthiswith
defaultifthrow 
deleteintry 

 

第 5 版把在非严格模式下运行时的保留字:

classenumextendssuper
constexportimport 

3.ECMAScript的变量是松散型的,可以用来保存任何类型的数据,每个变量仅仅是一个用于保存值的占位符。用var定义的变量成为定义该变量的作用域中的局部变量,在函数退出后会被销毁

4.ECMAScript有5种简单(基本)数据类型:Undefined、Null、Number、Boolean、String,一种复杂数据类型:Object
(1)使用 typeof 操作符检测给定变量的数据类型:

  • "undefined"——如果这个值未定义; 
  • "boolean"——如果这个值是布尔值; 
  • "string"——如果这个值是字符串;
  • "number"——如果这个值是数值;
  • "object"——如果这个值是对象或 null; 
  • "function"——如果这个值是函数。

(2)数据类型

  • Undefined 类型:只有一个值,即特殊的 undefined。在使用 var 声明变量但未对其初始化时,这个变量的值就是 undefined。
  • Null 类型:只有一个值即特殊的值是 null,undefined 值是派生自 null 值的,因此 ECMA-262 规定对它们的相等性测试要返回 true:alert(null == undefined); //true
  • Boolean 类型:只有两个字面值:true 和 false。
  • Number 类型:使用 IEEE754 格式来表示 整数和浮点数值。NaN,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。
  • 3 个函数可以把非数值转换为数值:Number()、parseInt()和 parseFloat()。

  • String类型:示由零或多个 16 位 Unicode 字符组成的字符序列,即字符串。ECMAScript 中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。
  • Object类型:一组数据和功能的集合。

5.操作符:用于操作数据值,在应用于对象时,相应的操作符通常都会调用对象的 valueOf() 和(或)toString()方法,以便取得可以操作的值

(1)一元操作符,递增和递减操作符:前置型和后置型。

  • 前置型:++n;--n;
  • //变量的值都是在语句被求值以前改变的,前置递增和递减操作与执行语句的优先级相等,
    var num1 = 2;
    var num2 = 20;
    var num3 = --num1 + num2;// 等于 21 
    var num4 = num1 + num2;// 等于 21
  • 后置型:n++;n--;
  • //递增和递减操作在包含它们的语句被求值之后才执行
    var num1 = 2;
    var num2 = 20;
    var num3 = num1-- + num2; // 等于 22 
    var num4 = num1 + num2; // 等于 21
    
    
  • var s1 = "2";
    var s2 = "z";
    var b = false;
    var f = 1.1;
    var o = {
        valueOf: function() {
            return -1;
    } };
    s1++; //值变成数值 3
    s2++; //值变成 NaN
    b++; //值变成数值 1
    f--; //值变成 0.10000000000000009(由于浮点舍入错误所致)
    o--; // 值变成数值-2
    

(2)在对非数值应用一元加操作符时,该操作符会像 Number()转型函数一样对这个值执行转换。

var s1 = "01";
var s2 = "1.1";
var s3 = "z";
var b = false;
var f = 1.1;
var o = {
    valueOf: function() {
        return -1;
IncrementDecrementExample04.htm
  } };
s1 = +s1; // 值变成数值 1
s2 = +s2; // 值变成数值 1.1
s3 = +s3; // 值变成 NaN
b= +b; // 值变成数值 0
f= +f; // 值未变,仍然是 1.1 
o= +o;// 值变成数值-1

(3)位操作符

  • 按位非(NOT):由一个波浪线(~)表示,执行按位非的结果就是返回数值的反码。
  • 按位与(AND):由一个和号字符(&)表示,只在两个数值的对应位都是 1 时才返回 1,任何一位是 0,结果都是 0。
  • 按位或(OR):由一个竖线符号(|)表示,在有一个位是 1 的情况下就返回 1,而只有在两个位都是 0 的情况下才返回 0。
  • 按位异或(XOR):由一个插入符号(^)表示,在两个数值对应位上只有一个 1 时才返回 1,如果对 应的两位都是 1 或都是 0,则返回 0。
  • 左移:由两个小于号(<<)表示,将数值的所有位向左移动指定的位数。
  • 有符号的右移:由两个大于号(>>)表示,将数值向右移动,但保留符号位(即正负号标记)。
  • 无符号右移:由 3 个大于号(>>>)表示,将数值的所有 32 位都向右移动。

(4)布尔操作符

  • 逻辑非:由一个叹号(!)表示,将它的操作数转换为一个布尔值,然后再 对其求反。
  • 逻辑与:由两个和号(&&)表示,属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值,遵守一下规则:
    如果第一个操作数是对象,则返回第二个操作数;
    如果第二个操作数是对象,则只有在第一个操作数的求值结果为 true 的情况下才会返回该对象;
    如果两个操作数都是对象,则返回第二个操作数;
    如果有一个操作数是 null,则返回 null;
    如果有一个操作数是 NaN,则返回 NaN;
    如果有一个操作数是 undefined,则返回 undefined。
  • 逻辑或:由两个竖线符号(||)表示,也是短路操作符,遵循下 列规则:

    如果第一个操作数是对象,则返回第一个操作数;
    如果第一个操作数的求值结果为 false,则返回第二个操作数; 
    如果两个操作数都是对象,则返回第一个操作数;
    如果两个操作数都是 null,则返回 null;
    如果两个操作数都是 NaN,则返回 NaN;
    如果两个操作数都是 undefined,则返回 undefined。

6.语句
(1)if语句:

  • if (condition) statement1 else statement2
    

(2)do-while语句:一种后测试循环语句,即只有在循环体中的代码执行之后,才会测试出口条件,循环体内的代码至少会被执行一次。

  • do {
            statement
    } while (expression);
      

(3)while语句:前测试循环语句,有可能永远不会被执行。

  • while(expression) statement

(4)for语句:前测试循环语句,由于 ECMAScript 中不存在块级作用域,因此在循环内部定义的变量也可以在外部访问到。

  • for (initialization; expression; post-loop-expression) statement

(5)for-in语句:一种精准的迭代语句,可以用来枚举对象的属性。ECMAScript 对象的属性没有顺序。因此,通过 for-in 循环输出的属性名的顺序是不可预测的。

  • for (property in expression) statement

(6)label语句:在代码中添加标签,可以在将来由 break 或 continue 语句引用。

  • label: statement

(7)break和continue语句:用于在循环中精确地控制代码的执行。其中,break 语句会立即退出循环, 强制继续执行循环后面的语句。而 continue 语句虽然也是立即退出循环,但退出循环后会从循环的顶 部继续执行。

(8)with语句:将代码的作用域设置到一个特定的对象中,为了简化多次编写同一个对象的工作。

  • with (expression) statement;

(9)switch语句:每个 case 的值不一定是常量,可以是变量,甚至是表达式,在比较值时使用的是全等操作符,因此不会发生类型转换。

  •  switch (expression) {
        case value: statement
            break;
        case value: statement
            break;
        case value: statement
            break;
        default: statement
    }
    

7.函数
(1)ECMAScript 中的函数在定义时不必指定是否返回值。

(2)任何函数在任何时候都可以通过 return 语句后跟要返回的值来实现返回值,位于 return 语句之后的任何代码都永远不会执行。

(3)ECMAScript函数不介意传递进 来多少个参数,也不在乎传进来参数是什么数据类型,因为ECMAScript 中的参数在内部是用一个数组来表示的。在函数体内可以通过 arguments 对象来 访问这个参数数组,从而获取传递给函数的每一个参数。

(4)所有参数传递的都是值,不可能通过引用传递参数。

(5)ECMAScript 函数没有重载,定义了两个名字相同的函数,则该名字只属于后定义的函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值