JavaScript高级程序设计读书笔记(一)基础概念
1、区分大小写,关键字保留字
2、标识符号(变量,函数、属性的名字活着函数的参数名)标识符的规则:首字母不能为数字,其它字符可以是字母,下划线,美元符活着数字
3、变量是松散类型,可以用来保存任何类型的数据,未初始化的变量会保存一个特殊值undefined
4、数据类型:基本数据类型和复杂数据类型
复杂数据类型:object 本质上是由一组无序的名值对组成
基本数据类型:undefined null nan boolean string number
undefined
只有一个值,即特殊值undefined
null
只有一个,即特殊值null,是一个空对象的指针
Boolean
有两个值true和false
转换规则:
(1)除0之外的所有数字,转换为布尔型都是true
(2)除“”之外的所有字符,转换为布尔型都是true
(3)null和undefined转换为布尔型都是false
Number
整数
十近制
八进制:第一位必需是0,然后八进制的数字序列是(0-7),如果字面值超出范围,那么前导0被忽略后面的数值以十进制解析,在严格(strict)模式下无效
var num1 = 070 // 56 var num2 = 079 // 79 var num3 = 08 // 8
十六进制:前面两位必须是0x后跟任何进制的数字和字母(0-9及a-F)不区分大小写。
在算术计算时,所有的八进制和十六进制都会转为十进制
浮点数
数值必须包含一个小数点,并且小数点后面必须有一位数字,保存浮点数值占用的空间是整数值的两倍
对于极大或极小的数值用科学记数法表示(e)
用e表示法的数值等于e前面的数值乘以10的指数次幂
var num1 = 3.125e4 // 31250 var num2 = 3e-2 // 0.3
由于内存限制,ESMAScript并不能保存世界上所有的数值
正无穷(Infinity)负无穷(-Infinity)
NaN (not a number)是一个特殊值,表示一个本来要返回值的操作数未返回值的情况
(1)任何涉及NaN的操作都会返回NaN
(2)NaN与任何值都不想等包括NaN本身
针对以上特点定义了isNaN()函数,帮我们确定参数是否是数值,isNaN()在接收一个值后,会尝试将这个值转换为数值,不是数值返回true是数值返回false
String
5、typeof操作符
因为ESMAScript是松散类型,所以需要一种手段来检测变量的数据类型,typeof操作符可能返回下列某个字符串
undefined // 值未定义 boolean //布尔值 string // 字符串 number // 数值 object // 对象或null function //函数
对未初始化和未声明执行typeof都返回undefined
6、数值转换
有3个函数可以把非数值转换为数值Number() ParseInt() ParseFloat()
Number可以用于任何数据类型,而后两个专门用于字符串转数值
Number的转换规则如下:
(1)Boolen值,true和false分别转换为1 0
(2)数字只是简单的传入和返回
(3)null返回0
(4)undefined返回NaN
如果是字符串:
(1)如果字符串包含数字(包括符号)转十进制
(2)如果是有效的浮点数,则转换为对应的浮点数忽略前导0
(3)如果是十六进制,则转为相同大小的十进制
(4)如果是空则为0
(5)其它为NaN
ParseInt()
忽略字符串前面的空格直到找到第一个非空格的字符串,如果第一个字符不是数字活着符号返回NaN,就是说ParseInt转换空字符串返回NaN;如鬼第一个是数字字符会继续解析直到遇到一个非数字字符,ParseInt可以识别各种格式(八,十六)
ParseInt有两个参数(转换值,基数(十,十六,八))
ParseFloat()
也是从第一个字符开始解析,直到末尾或者解析遇到一个无效的浮点数为止,也就是说第一个小数点是有效的,而第二个小数点是无效的。
之解析十进制,没有第二参数
7、操作符
递增(递减同理)
++a与a++都是对a进行递增操作
区别
++a先返回递增之后的a的值
a++先返回a的原值,在返回递增之后的值
8、逻辑操作符
逻辑非(!)
(1)如果操作数是一个对象,返回false
(2)如果是空字符串,返回true
(3)如果是非空字符,返回false
(4)如果是0返回true
(5)如果是任意非0数值(包括infinity)返回false
(6)如果是null返回true
(7)如果是NaN返回true
(8)如果是undefined返回true
逻辑与(&&)
短路操作,即如果第一个操作数能够决定结果,那么就不会在对第二个操作数求值,对于逻辑与来说如果第一个操作数是false,则无论第二个操作数是什么值,结果都不再可能是true
在有一个操作数不是布尔值的情况下
(1)如果第一个操作数隐式类型转换后为true,则返回第二个操作数
(2)如果第一操作数隐式类型转换后为false,则返回第一个操作数
(3)有一个null返回null
(4)有一个NaN返回NaN
(5)有一个undefined就返回undefined
var found = true; var result = (found&&some) // 发生错误 console.log(result) //不会执行
以上代码中,当执行逻辑与操作符时发生错误,因为some没有声明,有found的值时true,所以逻辑与操作符会继续对some求值,但some未定义,所以报错
var found = false; var result = (found&&some) // 不发生错误 console.log(result) //会执行
以上代码不会报错,因为无论some有没有定义,也永远不会对它求值,因为第一个操作数时false,也就意味着逻辑与的操作结果一定为false
逻辑或(||)
短路操作符,如果第一个操作数的求值结果为true,就不会对第二个操作数求值
如果有一个操作数不是布尔值的情况下
(1)如果一个操作数隐式类型转换后为true,则返回第一个操作数
(2)如果一个操作数隐式类型转换后为false,则返回第二个操作数
(3)两个操作数都是null则返回null
(4)两个操作数都是NaN则返回NaN
(5)两个操作数都是undefined则返回undefined
var found = true var result = (found||som) //对 console.log(result) //true
以上代码中some虽然没有定义,但是由于变量found是true,some永远不会被求值,所以不会报错
9、函数
(1)未指定返回值的函数返回一个特殊值undefined
(2)可以向函数传递任意数量的参数,并通过arguments对象来访问这些参数