# 3. 基本概念

  • JavaScript是区分大小写的(变量, 函数名和操作符都是区分的)

  • 标识符: 是指变量, 函数, 属性的名字

  • 标识符规则:

    • 第一个字符必须是一个字母, 下划线或者一个美元符号$
    • 其他字符可以是字母, 下划线, 美元符号或者数字
  • 定义变量的默认值是undefined

# 3.1 数据类型

  • 基本数据类型:
    • Undefined: 该类型只有一个值 undefined
    • Null: 该类型只有一个值 null
    • Boolean
    • Number
    • String
  • 复杂数据类型
    • Object

# 3.2 typeof 操作符

  • 检测变量的数据类型: typeof
    • "undefined"
    • "boolean"
    • "string"
    • "number"
    • "function"
    • "object"

typeof 特殊注意

typeof null = "object"
  • 即便一个变量是未被定义的, typeof返回也是undefined
// var a;
typeof a; // undefined

# 3.3 Boolean类型

  • 执行if语句时, 会对内部控制流语句自动进行相应的Boolean转换, 即调用Boolean()

TIP

Boolean("") === false;
Boolean(0) === false;
Boolean(NaN) === false;
Boolean(null) === false;
Boolean(undefined) === false;

# 3.4 Number类型

  • 八进制的第一位必须是0, 十六进制第一位必须是0x

  • 3.125e7 = 3.125 * 10^7

  • js的浮点数的精度在小数点的17位

  • 数值范围: Number.MIN_VALUE -> Number.MAX_VALUE

  • 超出数值范围是 -Infinity -> +Infinity

  • 判断变量是否是无穷的: isFinite()

  • isNaN()在接收到一个值之后, 会尝试将这个值转换为数值, 如果不能转换,则返回true

isNaN(NaN) //true
isNaN(10) //false
isNaN("10") //false
isNaN("blue") //true
isNaN(true) //true
  • 以下三个函数可以把非数值转换为数值
    • Number()
    • parseInt()
    • parseFloat()

TIP

Number()的转换规则

// 对于boolean会把true转为1, false转为0
Number(true) // 1
Number(false) // 0

// 对于null, 返回0
Number(null) //0

// 对于undefined, 返回NaN
Number(undefined) // NaN

// 对于字符串
// 1.对于只是数字的, 会转换为10进制
// 2.如果是16进制0x的, 也会转成10进制
// 3.字符串为空, 转成0
// 4.其他为NaN

Number('hello world') //NaN
Number('') //0
Number('0011') //11
Number('011') //11
Number('1.1') //1.1

  • +操作符和Number()函数相同

  • parseInt()会从第一个数字字符依次解析, 直到不为数字为止, 如果第一位就不是数字就会返回NaN

parseInt("") // NaN
parseInt("12blue") //12
parseInt("AF") //NaN
parseInt("AF", 16) //175
  • parseFloat()
    • 只会把第一个小数点作为有效
    • 只解析10进制(没有第二个参数), 如果是16进制, 会转换成0
parseFloat("123blue") //123
parseFloat("1.2.3") // 1.2
parseFloat("0xA") //0
parseFloat("aa") //NaN

# 3.5 String类型

  • toString()

    • 数值,布尔值,对象和字符串值都有toString()方法,但nullundefined没有这个方法
    • 数值的toString(n), 按照进制转换
  • String()的转换规则

    • 如果值有toString方法, 则调用
    • 如果是null或者undefined返回"null", "undefined"

# 3.6 Object类型

  • 操作符应用到对象上时, 会先调用对象的valueOf()方法, 判断是否能转换, 如果不能再调用toString()方法, 在进行测试

  • for...in 用于枚举对象的属性

# 3.7 函数

  • arguments 只是类数组, 可以通过下标访问每个参数, 也可以通过length来访问参数长度, 但没有数组的其他方法.