数据类型
值类型
- 每个变量都能存储值,不会相互影响,这就是值类型的特点
- 从内存中来说,把每个值都存储在每个变量名的位置
var a = 100; // 先给 a 赋值 100
var b = a; // 再把 a 赋值给 b
a = 200; // a 重新赋值 200
console.log(b) // 100
引用类型
- 从内存中说来,引用类型的变量只有一个,a、b指针都是指向同一个变量
- 特点是不限制扩展属性
- 如果扩展属性很多,会出现内存占用比较大的问题
var a = {age:20};
var b = a;
b.age = 21;
console.log(a.age); //21
typeof 运算符
- typeof 6种类型
- typeof 能区分4种值类型 (undefined、string、number、boolean)但无法区分引用类型,除了能区分引用类型中的function类型,无法区分其他引用类型,因为函数是很特殊的引用类型
typeof undefined // undefined
typeof 'abc' // string
typeof 123 // number
typeof true // boolean
typeof {} // object
typeof [] // object
typeof null // object
typeof console.log // function
变量计算 强制类型转换(针对值类型)
- 字符串拼接
var a = 100 + 10 // 110
var b = 100 + '10' // '10010'发生类型转换
- ==运算符
==双等计算慎用
100 == '100' //true //100被转为 '100'
0 == '' // true 0 和 '' //都被强制转换为false
null == undefined //true //null 和 undefined 被转换为false
- if语句
var a = true
if(a){
//...
}
var b = 100
if(b){
//... 100被强制转换成true
}
var c = ''
if(c){
//... '' 被强制转换成false
}
- 逻辑运算
console.log(10 && 0) // 0 //10被转换成true
console.log('' || 'abc') // 'abc' //'' 被转换成false
console.log(!window.abc) // true //window.abc 是undefined,undefined !之后变成了true
//判断一个变量会被当作true还是false 如下
var a = 100
console.log(!!a)// 一个!被转换为对立的布尔值,再一个!再转换回来
Q1 何时使用=== 和 ==
*除了以下情况用==,其他地方都用=== *
if(obj.a == null){
//这里相当于obj.a === null || obj.a === undefined,简写形式
//这是jquery源码中推荐写法
}
JS中内置函数 —— 数据封装类对象
//问题:JS中有哪些内置函数 —— 数据封装类对象 (涉及原型原型链)
Object
Array
Boolean
Number
String
Function
Date
RegExp
Error
- 另外
Math //内置对象函数
JS按存储方式区分变量类型
//JS变量按照存储方式区分为哪些类型,并描述其特点
//值类型 分块存储在内存中 值的拷贝
var a = 10
var b = a
a = 20
console.log(b) // 10
//引用类型 共用一个内存块 为了节省内存空间 指针指向同一个内存块 不是值的拷贝
var obj1 = {x:100};
var obj2 = obj1;
obj2.x = 200;
console.log(obj1.x) //200
如何理解JSON
- json 是对象也是数据格式
//问题: 如何理解JSON
//JSON 只不过是一个JS对象而已
JSON.stringify({a:10,b:20})//'{"a":10,"b":20}' // 对象转字符串
JSON.parse('{"a":10,"b":20}')//{a:10,b:20} //字符串转对象