基本数据类型
1、undefined和xx is not defined
- undefined表示变量定义后没被赋值或者函数没有定义返回值
- xx is not defined 表示xx没有被定义
var a;
console.log(a) //undefined
console.log(b) //b is not defined
2、坑人的运算结果
var c = undefined
console.log(typeof a === undefined) //false
console.log(typeof a === 'undefined') //true
console.log(typeof c) // undefined
console.log(1 / 0) // Infinity
console.log(-1 / 0) // -Infinity
// 计算机浮点数相加是转为二进制运算,最高精度是17位小数,所以存在误差
console.log(0.1 + 0.2) // 0.30000000000000004
console.log(10 + 'a') // 10a
console.log(typeof (10 + 'a')) // string
console.log(isNaN(10 + 'a')) //true
console.log(10 - 'a') // NaN
console.log(10 / 'a') // NaN
3、typeof优先级高于加法 同级于一元加法
优先级详情: www.jianshu.com/p/d569c6ca1…
console.log(typeof '10' * 1) // 等价于'string' * 1 NaN
console.log(typeof ('10' * 1)) // number
console.log(typeof +'10') //number
var a = null
console.log(typeof a) // object
console.log([] instanceof Object) //true
// 逻辑与&&(同真才真,有假则假)
// 第一个数为真,返回第二个数 第一个数为假,返回第一个数
console.log(Boolean(null)) //false
console.log(null && 1) //null
// 逻辑或 ||(有真则真,同假才假)
// 如果第一个操作数是真,直接返回第一个操作数。
console.log(0 || 0 || 2) // 2
console.log(1 || 0 || 3) //1
// 逻辑非(NOT)
console.log(!1) //false
4、toSring()和parseInt()
// toString()
var num = 10;
console.log(num.toString()) //"10"
console.log(num.toString(2)) //"1010"
console.log(num.toString(8)) //"12"
console.log(num.toString(16)) //"a"
console.log(typeof String(null)) //string
console.log(Number('+12.3')) //12.3
console.log(Number('1+2.3')) // NaN
console.log(Number('123ac')) // NaN
// parseInt()函数
// 如果转换的值是null,undefined,boolean,均转换为NaN
console.log(parseInt('+12.3')) // 12 首位为符号位,其余为为数值,转换为整数
console.log(parseInt('1+2.3')) // 1 符号位出现在其他位置,保留符号位前面的数值
console.log(parseInt('0xa')) // 10
console.log(parseInt('010')) // 10 不解析八进制
console.log(parseInt('123ac'));
console.log(parseInt('0101', 2))
5、Boolean为false的情况
1、undefined(未定义,找不到值时出现)
2、null(代表空值)
3、false(布尔值的false,字符串"false"布尔值为true)
4、0(数字0,字符串"0"布尔值为true)
5、NaN(无法计算结果时出现,表示"非数值";但是typeof NaN==="number")
6、""(双引号)或''(单引号) (空字符串,中间有空格时也是true)
console.log(Boolean(undefined)) // false
console.log(Boolean(null)) // false
console.log(Boolean(false)) // false
console.log(Boolean('false')) // true
console.log(Boolean(0)) // false
console.log(Boolean('0')) // true
console.log(Boolean(NaN)) // false
console.log(Boolean('')) // false