美文网首页
2018-03-06 JavaScript红宝书学习笔记

2018-03-06 JavaScript红宝书学习笔记

作者: Lin_XJ | 来源:发表于2018-03-06 13:29 被阅读0次

    第一章

    defer属性的作用
    <script type="text/javascript" defer="defer" src="xxx.js"><script>
    

    相当于告诉浏览器立即下载,但延迟执行

    async属性的作用

    与defer类似,只是标记为async的脚本不保证按照指定它们的先后顺序执行

    </script>字符串问题

    在使用<script>嵌入JavaScript代码时,记住不要在代码中的任何地方出现"</script>"字符串。例如下面一个错误:

    <script type="text/javascript">
      function sayScript() {
        alert("</script>");
      }
    
    src属性

    需要注意的是,带有src属性的<script>元素如果包含了嵌入的代码,则只会下载并执行脚本文件,潜入的代码会被忽略,比如:

    <script src="xxx.js" type="text/javascript">
      alert("hello") // 这句不会被执行
    </script>
    

    数据类型

    ECMAScript中规定了五种简单数据类型(基本数据类型)和一种复杂数据类型:

    • 简单数据类型
      • Undefined
      • Null
      • Boolean
      • Number
      • String
    • 复杂数据类型
      • Object
    typeof操作

    typeof是一个操作符而不是函数,但也可以加圆括号使用

    var message = "something"
    alert(typeof message); // "string"
    alert(typeof(message)); // "string"
    alert(typeof 95); // "number
    

    typeof返回的可能值有:

    • "number"
    • "string"
    • "boolean"
    • "undefined"
    • "object" (null也返回"object")
    • "function" (从技术角度讲,函数在ECMAScript中是对象,然而由于特殊性,因此通过typeof来区分函数和其他对象是有必要的)

    对尚未初始化的变量和未声明的变量执行typeof操作都会返回undefined:

    var message;
    // 下面这个变量并未声明
    // var age
    
    alert(typeof message); // "undefined"
    alert(typeof age); // "undefined"
    

    对尚未声明的变量,只能执行一项操作,即typeof,其他操作将导致报错。
    undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true(两个等号):

    alert(null == undefined); // true
    

    如果用三个等号则返回false:

    alert(null === undefined); // false
    
    数据的Boolean值
    数据类型 true false
    String 任何非空字符串 ""(空字符串)
    Number 任何非零数值(包括无穷大) 0和NaN
    Object 任何对象 null
    Undefined undefined

    ECMAScript中所有类型的值都有与Boolean值等价的值

    Number

    八进制用前置0代表,十六进制用前置0x代表,如果前置了0,但是数值超过八进制,则前置0被忽略,最终按十进制表示。

    var n1 = 070; // 八进制的56
    var n2 = 079; // 无效的八进制数值--解析为79
    
    var n3 = 0x1f; // 十六进制的31,可大写,也可小写
    

    由于浮点数值需要的内存空间是整数的两倍,因此ECMAScript会不失时机地将浮点数值转化为整数值。

    var floatNum1 = 1.; // 小数点后面没有数字,解析为1
    var floatNum2 = 10.0; // 整数,解析为10
    

    永远不要测试某个特定的浮点数值。

    if (a + b == 0.3) { // 不要做这样的测试!
      alert("you got 0.3");
    }
    

    任何数除以0将得到NaN,任何涉及NaN地操作都会返回NaN,NaN与任何值都不想等,包括NaN本身。
    isNaN()方法可以用来检测是否是NaN,isNaN()在接收到一个值之后,会尝试将这个值转换为数值,某些不是数值的值会直接转换为数值,例如字符串“10”或Boolean值:

    alert(isNaN(NaN)); // true
    alert(isNaN(10)); // false
    alert(isNaN("10")); // false (可以被转换为数值10)
    alert(isNaN("blue")); // true
    alert(isNaN(true)); // false(可以被转换为数值1)
    

    尽管有点不可思议,但isNaN确实也适用于对象。在基于对象调用isNaN()时,会首先调用对象的valueOf()方法,然后确定该方法返回的值是否可以转换为数值,如果不能,则基于这个返回值再调用toString()方法,再测试返回值。

    Object

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

    • Constructor 构造函数
    • hasOwnProperty(propertyName): 用于检查给定的属性在当前实例中(而不是在实例原型中)是否存在。其中,作为参数的属性名必须以字符串形式指定。
    • isPrototypeOf(object)
    • propertyIsEnumerable
    • toLocalString()
    • toString()
    • valueOf()
    一元操作符
    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
    

    一元+操作符加在变量前面,等同于Number()操作。

    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
    o = +o; // 值变成-1
    

    相关文章

      网友评论

          本文标题:2018-03-06 JavaScript红宝书学习笔记

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