面试字节时被吊打的基本数据类型

2,824 阅读2分钟

基本数据类型

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