JS变量与计算
1、变量分类
JS变量最基本的分类就是【值类型】和【引用类型】
值类型:在内存中存放在“栈”中的数据,数据量比较小的,例如:undefined、string、number、boolean
引用类型:在内存中存放在“堆”中的数据,数据量比较大的占内存的,基于节省内存的机制,栈中仅保留堆地址,例如:object、array、function、null等
【typeof】可以区分类型有`number` `string` `boolean` `undefined`(值类型) `function` `object`(引用类型)
【typeof】可以准确区分 值类型,引用类型仅可以区分 对象和函数
值类型:
typeof undefined // undefined typeof 'abc' // string typeof 123 // number typeof true // boolean
引用类型:
typeof {} // object typeof [] // object typeof null // object 【因为 null 也是引用类型。null 就相当于引用类型中的 undefined】
typeof console.log // function
//值类型示例 var a = 100 var b = a a = 200 console.log(b) //引用类型示例 var a = {age:20} var b = a b.age = 21 console.log(a.age)
2、变量计算
JS 在值类型的运算过程中,特别需要注意和利用【强制类型转换】,使用场景:
- 字符串拼接 “+”
- `==`
- 逻辑运算(`if` `!` `||` `&&`)
1)字符串拼接
var a = 100 + 10 // 110 var b = 100 + '10' // '10010'
2) `==`
100 == '100' // true 0 == '' // true null == undefined // true
`==`会先试图类型转换,然后再比较,而`===`不会类型转换
1 == '1' // true 1 === '1' // false 0 == false // true 0 === false // false null == undefined // true null === undefined // false
jQuery 源码中的写法,只推荐在一个地方用`==`,其他地方都必须用`===`。这个用`==`的地方就是:
if (obj.a == null) { // 这里相当于 obj.a === null || obj.a === undefined ,简写形式 }
3)逻辑运算符(`if` `!` `||` `&&`)
//所有经过`if`判断的变量,都会进行逻辑运算的强制类型转换,转换为`true`或者`false`
var a = true if (a) { // .... } var b = 100 if (b) { // .... b强制转换成boolen值:true } var c = '' if (c) { // .... c强制转换成boolen值:false }
console.log(10 && 0) // 0 console.log('' || 'abc') // 'abc' console.log(!window.abc) // true // 判断一个变量会被当做 true 还是 false var a = 100 console.log(!!a)
日常开发中,以下变量会被转换为`false`
- - 0
- - NaN
- - '' "
- - null
- - undefined
- - false 本身
3、 JS中有哪些内置函数 —— 数据封装类对象
`Object` 、`Array` 、`Boolean` 、`Number` 、`String` 、`Function`
`Date` 、`RegExp` 、`Error`
4、在 JS 中,所有的引用类型都可以自由设置属性
var obj = {} obj.a = 100 var arr = [] arr.a = 100 function fn() {} fn.a = 100
5、如何理解JSON
JSON.stringify({a:10, b:20}) //将对象解析成字符串 JOSN.parse('{"a":10,"b":20}') //将字符串数据转换为 JavaScript 对象
从 JS 角度回答,`console.log(JSON)`得到`JSON`只是一个对象,有`parse`和`stringify`两个方法;
json 也是一种数据格式,这一点和 xml 一样。