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对象来访问这些参数