Javascript权威指南看书笔记

时间:2022-08-27 08:22:59

Javascript权威指南看书笔记

第一章 词法结构

  • javascript区分大小写,而html不区分大小写

  • unicode转义序列是由/u为前缀加4位16进制数组成

  • 标识符必须以字母,下划线 _,美元符 $,开始

  • 分号:javascript中语句独占一行,通常可以省略语句之间的分号。

    例外:

    1. return,break,continue,后紧跟换行,javascript会在换行处补填分号。

    2. 双目运算符++,--,若想作为表达式后缀的话必须与表达式同一行。

第二章 类型,值和变量

  • javascript支持十进制和十六进制,因ECMAscript标准不支持八进制直接量,因此最好不要用以0为前缀的直接量

  • Math对象的属性:

        math.round(.6)   //=>1.0 四舍五入

math.ceil(.6) //=>1.0 向上去整

math.floor(.6) //=>0.0 向下去整
  • 算数运算中的特例

    • 溢出(overflow):数字运算结果超过了javascript所能表示的上限

    正数返回Infinity,负数返回-Infinity

    • 下溢(underflow):结果比javascript所能表示的最小数小,返回0,

    负数下溢会返回特殊的值’-0’

    • 被0整出返回Infinity或-Infinity,例外,0/0返回NaN

    • NaN:和任何值都不相等,包括自身

  • 判断isNaN()函数

        x!=x;  //仅当x为NaN,为true
  • 0和-0值除了作为除数外两个值是相等的

  • 二进制浮点数并不能精确表示类似于0.1的简单数字

        (.2-.1)==(.3-.2);  //=>>false
  • 字符串直接量:用单引号来界定字符串时,需格外小心英文中的所有个和缩写,需用(/)转义

    • Javascript和HTML带吗使用各自独立的引号风格

    • Javascript表达式使用单引号表示字符串

    • HTML事件处理属性时用双引号表示字符串

  • 属性:

        s.replace(“h”,”H”); //”hello”=>”Hello”

s.toUpperCase( ); //”hello”=>”HELLO”
  • 字符串还可以当作只读数组,通过方括号访问

  • 布尔值:javascript的任意值都可以转化为布尔值

    False:undefined ; null ; 0 ; -0 ; NaN ;‘ ‘

    True: 所有其他值,包括所有对象,数组
  • Null是javascript的关键字,undefined是预定义的全局变量,“==”认为两者是相等的

  • 包装对象

        var s=”test”;

S.len=4;

Var t=s.len; //undefined
    在读取字符串,数字和布尔值的属性(或方法)时,表现得像对象一样。但试图给其属性赋值,则会忽略该操作:修改只发生在临时对象上,而临时对象并未继续保留下来
  • 原始值是不可改变的。(undefined,null,布尔值,数字,字符串)

  • 对象的值可通过对象属性来更改(数组,函数)

    • 两个对象包含相同的属性和值也不相等
  • Number()和parseFloat()区别

    • Number():只能用于十进制数转换,并且不能出现非法尾随字符

    • parseInt():会跳过任意数量的前导空格,并忽略后面的内容,第一个非空格字符是非法的数字直接量则返回NaN

  • 所有的对象转换为布尔值都是true

  • 尽管全局作用域编写代码时可以不写var语句,但声明局部变量时必须使用var语句

  • 声明提前:函数体内局部变量遮盖同名全局变量,函数体内的变量声明会提前至函数体顶部

  • 声明一个javascript全局变量时,实际上是定义了全局对象的一个属性

  • javascript中,所有柱子都是浮点型的,除法运算结果也是浮点型

第三章

  • “===”:当两操作数类型和值都相等。0===-0

  • “==”:若两操作数不是同一类型,会尝试进行类型转换

  • 加号运算符更偏爱字符串;比较运算符更偏爱数字,只有两个数都是字符串时才会进行字符串比较,若一个操作数是NaN,总返回false

  • 大多数情况下 a op= b;等价于a = a op b;当a包含具有副作用的表达式时不等价,eg:data[i++]*=2; data[i++]=data[i++]*2;

  • typeof(NaN)==”number”;

  • delete只能删除对象属性或数组元素,不像C++中用来删除整个对象

    • delete的操作数若不是左值,不进行操作返回true;若删除成功,返回true