变量类型和变量计算

变量类型分为:值类型和引用类型。

// 值类型:
var a = 100
var b = a
a = 200
console.log(b) // 100, 值类型每个变量在内存中都存储自己的值

// 引用类型
var a = {age: 20}
var b = a
b.age = 21
console.log(a.age)
// 21,引用类型的变量存储的是对象的指针,对象的值在另一块内存中,当b = a时,b创建的指针和a指向同一个对象。引用类型有数组,对象和函数。引用类型主要是为了节约内存

typeof 一共有5种类型, 只能区分值类型, 引用类型只能区分出 function 和 object

typeof undefined // undefined
typeof 'kuker' // string
typeof 123 // number
typeof true //boolean
typeof {} //object
typeof [] // object
typeof null // object
typeof console.log // function

变量计算 - 强制类型转化(值类型)

// 1. 字符串拼接
var a = 100 + 10 // 110
var a = 100 + '10' //10010

// 2. == 运算符, 会自动进行类型转化
100 == '100' // true, 都会转化成100
0 == '' // true, 0和''都会转为false
null == undefined // true, 都会转为false

// 3. if 语句
var a = true
if (a) {
// ....
}
var b = ''
if (b) {
// ...
}

// 4. 逻辑运算
10 && 0 // 0
'' || 'abc' // 'abc
!window.abc // true

// 判断一个变量会被当作 true 还是 false
var a = 100
console.log(!!a)

常见面试题

// 1. JS中使用typeof能得到哪些类型?

typeof undefined // undefined
typeof 'kuker' // string
typeof 123 // number
typeof true //boolean
typeof {} //object
typeof [] // object
typeof null // object
typeof console.log // function

// 2. 何时使用 === ? 何时使用 == ?

if (obj.a == null) {
// 这里相当于 obj.a == null || obj.a === undefined, 简写形式
// 这是 jquery 源码中推荐的写法
// 除了上面的情况, 别的都用 ===
}

// 3. JS中的内置函数有哪些? - 数据封装类对象
// 不去考虑宿主环境,只有以下几个内置函数

Object
Array
Boolean
Number
String
Function
Date
RegExp
Error

// 4. JS变量按照存储方式区分为哪些类型,并描述其特点
// 分类值类型和引用类型
// 值类型
var a = 10
var b = a
a = 11
console.log(b) // 10

// 引用类型
var obj1 = {x:100}
var obj2 = obj1
obj1.x = 200
console.log(obj2.x) // 200

// 5. 如何理解JSON?
// JSON是一种数据格式, 在JS中 也是一个 JS 对象

JSON.stringify({a:10, b:20})
JSON.parse('{"a":10, "b":20}')