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