美文网首页
JavaScript高级程序设计(第三版)3-4章

JavaScript高级程序设计(第三版)3-4章

作者: ft207741 | 来源:发表于2018-10-10 09:10 被阅读0次

    Menu

    • 第3 章 基本概念
      • 数据类型

    第3 章 基本概念

    数据类型
    • "undefined"——如果这个值未定义;
    • "boolean"——如果这个值是布尔值;
    • "string"——如果这个值是字符串;
    • "number"——如果这个值是数值;
    • "object"——如果这个值是对象或 null;
    • "null"——如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为 null 而不是其他值。 undefined 值是派生自 null 值的;
    • "function"——如果这个值是函数
    var message = "some string";
    alert(typeof(message)); // "string"
    

    Number (数字)
    • isFinite(number)函数:
      • 这个函数在参数位于最小与最大数值之间时会返
        回 true;
    • NaN:
      • NaN,即非数值(Not a Number)是一个特殊的数值;
      • 对NaN做任何计算都会返回 NaN;
      • 只有 0 除以 0 才会返回 NaN,正数除以 0 返回 Infinity,负数除以 0 返回-Infinity;
      • isNaN()函数:
        • 判断传入的是否“不是数字”;
    alert(isNaN(NaN)); //true
    alert(isNaN(10)); //false( 10 是一个数值)
    alert(isNaN("10")); //false(可以被转换成数值 10)
    alert(isNaN("blue")); //true(不能转换成数值)
    alert(isNaN(true)); //false(可以被转换成数值 1)
    

    数值转换 (page48)
    • 把非数值转换为数值: Number()、 parseInt()和 parseFloat();

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

      • 如果是 Boolean 值, true 和 false 将分别被转换为 1 和 0。
      • 如果是数字值,只是简单的传入和返回。
      • 如果是 null 值,返回 0。
      • 如果是 undefined,返回 NaN。
      • 如果是字符串,遵循下列规则:
        • 如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即"1"
          会变成 1, "123"会变成 123,而"011"会变成 11(注意:前导的零被忽略了);
        • 如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值(同样,也会忽
          略前导零);
        • 如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整
          数值;
        • 如果字符串是空的(不包含任何字符),则将其转换为 0;
        • 如果字符串中包含除上述格式之外的字符,则将其转换为 NaN。
      • 如果是对象,则调用对象的 valueOf()方法,然后依照前面的规则转换返回的值。如果转换
        的结果是 NaN,则调用对象的 toString()方法,然后再次依照前面的规则转换返回的字符
        串值。
    • parseInt() 函数:

      • 语法: parseInt(string, radix)
      • parseInt() 函数可解析一个字符串,并返回一个整数 ;
      • radix可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
      • var num = parseInt("0xAF", 16); //175
    • parseFloat() 函数:

      • parseFloat()只解析十进制值;
    var num1 = parseFloat("1234blue"); //1234 (整数)
    var num2 = parseFloat("0xA"); //0
    var num3 = parseFloat("22.5"); //22.5
    var num4 = parseFloat("22.34.5"); //22.34
    var num5 = parseFloat("0908.5"); //908.5
    var num6 = parseFloat("3.125e7"); //31250000
    

    String类型 (page50)
    • 转换为字符串

    • str.toString()

    • 除了null 和 undefined之外的数据类型都有toString()方法;

    • 默认情况下, toString()方法以十进制格式返回数值的字符串表示。而通过传递基数, toString()可以输出以二进制、八进制、十六进制,乃至其他任意有效进制格式表示的字符串值。

    • String()函数:

      • String()函数能够将任何类型的值转换为字符串。
        • 如果值有 toString()方法,则调用该方法(没有参数)并返回相应的结果;
        • 如果值是 null,则返回"null";
        • 如果值是 undefined,则返回"undefined"。

    Object类型 (page53)
    • 创建实例:
      • var o = new Object();
    • Object 的每个实例都具有下列属性和方法:
      • constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)
        就是 Object()。
      • hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例
        的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例
        如: o.hasOwnProperty("name"))。
      • isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型(第 5 章将讨论原
        型)。
      • propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用 for-in 语句
        (本章后面将会讨论)来枚举。与 hasOwnProperty()方法一样,作为参数的属性名必须以字符
        串形式指定。
      • toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
      • toString():返回对象的字符串表示。
      • valueOf():返回对象的字符串、数值或布尔值表示。通常与 toString()方法的返回值
        相同。
    操作符 (page54)
    • 一元操作符
      • 递增和递减操作符有两个版本:前置型和后置型。
        • ++i, --i, i++,i-- ;
      • 前置型:
        • 执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的。(在计算机科学领域,这种
          情况通常被称作副效应。)
        var i1 = 10;
        var i2 = 20;
        var re = (--i1) + i2;  // 29
    
    • 后置型:
      • 后置递增和递减与前置递增和递减有一个非常重要的区别,即递增和递减操作是在包含它们的语句被求
        值之后才执行的。
    var num1 = 2;
    var num2 = 20;
    var num3 = num1-- + num2; // 等于 22
    var num4 = num1 + num2; // 等于 21
    
    • 递增和递减操作符遵循下列规则:

      • 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减 1 的操作。字
        符串变量变成数值变量。
      • 在应用于一个不包含有效数字字符的字符串时,将变量的值设置为 NaN(第 4 章将详细讨论)。
        字符串变量变成数值变量。
      • 在应用于布尔值 false 时,先将其转换为 0 再执行加减 1 的操作。布尔值变量变成数值变量。
      • 在应用于布尔值 true 时,先将其转换为 1 再执行加减 1 的操作。布尔值变量变成数值变量。
      • 在应用于浮点数值时,执行加减 1 的操作。
      • 在应用于对象时,先调用对象的 valueOf()方法(第 5 章将详细讨论)以取得一个可供操作的值。然后对该值应用前述规则。如果结果是 NaN,则在调用 toString()方法后再应用前述规则。对象变量变成数值变量;
    • 一元加和减操作符

      • 加号(+)放在数值前面,对数值不会产生任何影响,不过,在对非数值应用一元加操作符时,该操作符会像 Number()转型函数一样对这个值执行转换。如:布尔值 false 和 true 将被转换为 0 和 1。字符串值会被按照一组特殊的规则进行解析,而对象是先调用它们的 valueOf()和(或) toString()方法,再转换得到的值;
    • 布尔操作符

      1. 逻辑非
      • 逻辑非操作符由一个叹号(!)表示;
      • 如果操作数是一个对象,返回 false;
      • 如果操作数是一个空字符串,返回 true;
      • 如果操作数是一个非空字符串,返回 false;
      • 如果操作数是数值 0,返回 true;
      • 如果操作数是任意非 0 数值(包括 Infinity),返回 false;
      • 如果操作数是 null,返回 true;
      • 如果操作数是 NaN,返回 true;
      • 如果操作数是 undefined,返回 true。
      • 下面几个例子展示了应用上述规则的结果:
    alert(!false); // true
    alert(!"blue"); // false
    alert(!0); // true
    alert(!NaN); // true
    alert(!""); // true
    alert(!12345); // false
    
    • 得到数值真正对应的布尔值:
    alert(!!"blue"); //true
    alert(!!0); //false
    alert(!!NaN); //false
    alert(!!""); //false
    alert(!!12345); //true
    
      1. 逻辑与
      • 逻辑与操作属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。
      1. 逻辑或
      • 逻辑或操作符也是短路操作符。也就是说,如果第一个操作数的求值结果为true,就不会对第二个操作数求值了。如果两个都是false那就返回第二个操作数;
    • 加减操作符

      • 数字与字符串相加则是连结;
        • document.write(10 + "20"); //1020
      • 数字与字符串相减则是算术运算;
        • document.write(20 - "10"); //10
    function (函数) page80
    • 函数声明
        function funcName(args){
            some_statement;
        }
    
    • 理解参数
      • ECMAScript 函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型。
      • 如果声明函数时,有2个形参,使用函数时,可以传无限多个参数,也可以不传参数,参数会收集在名为arguments的一个数组里。可以用下标来找到并使用参数,如arguments[0];
      • 如果函数定义了一个叫name的形参,在函数体里打印name,但在调用函数时未传实参,那么这个name会变成undefine;
        function sayHi() {
            alert("Hello " + arguments[0] + "," + arguments[1]);
        }  // 如果没传参,参数会变成undefine;
    

    第3 章 基本概念

    基本类型和引用类型的值
    • 5 种基本数据类型: Undefined、 Null、 Boolean、 Number 和 String。
    • 引用类型的值是保存在内存中的对象。

    动态的属性
    • 对于引用类型的值,我们可以为其添加属性和方法,也可以改变和删除其属性和方法。如果对象不被销毁或者这个属性不被删除,则这个属性将一直存在。
    var person = new Object();
    person.name = "Nicholas";
    alert(person.name); //"Nicholas"
    
    • 但是,我们不能给基本类型的值添加属性,尽管这样做不会导致任何错误。比如:
    var name = "Nicholas";
    name.age = 27;
    alert(name.age); //undefined
    
    复制变量值
    • 在从一个变量向另一个变量复制基本类型值和引用类型值时:
      • 基本数据类型是复制一份拷贝(修改其中一个变量的值不会影响另一个变量的值);
      • 引用数据类型是复制了指针地址(修改其中一个变量的值会影响另一个变量的值);
    检测类型 page90
    • typeof 操作符是确定一个变量是字符串、数值、布尔值,还是 undefined 的最佳工具;
    • 对象或 null,则返回"object";
    var s = "Nicholas";
    var b = true;
    var i = 22;
    var u;
    var n = null;
    var o = new Object();
    
    alert(typeof s); //string
    alert(typeof i); //number
    alert(typeof b); //boolean
    alert(typeof u); //undefined
    alert(typeof n); //object
    alert(typeof o); //object
    
    • 检测引用类型的值时,可以用instanceof 操作符;
    document.write([1, 2, 3] instanceof Array)  //true
    

    -根据规定,所有引用类型的值都是 Object 的实例。因此,在检测一个引用类型值和 Object 构造函数时, instanceof 操作符始终会返回 true。

    alert(person instanceof Object); // 变量 person 是 Object 吗?
    alert(colors instanceof Array); // 变量 colors 是 Array 吗?
    alert(pattern instanceof RegExp); // 变量 pattern 是 RegExp 吗?
    
    执行环境及作用域
    • 为了内存优化考虑,不要用的全局变量要及时赋值为null;

    page101


    
    
    • ;

    相关文章

      网友评论

          本文标题:JavaScript高级程序设计(第三版)3-4章

          本文链接:https://www.haomeiwen.com/subject/rradaftx.html