一、值类型
他们之间的值不会相互干预
//值类型
var a = 100;
var b = a;
a = 200;
console.log(b); //100
var c = b
b = 300
console.log(c) //100
二、引用类型
这里的a,b,c都是指针,指向了一个对象
var a = {age:20}
var b = a
console.log(a) //{ age: 20 }
console.log(b) //{ age: 20 }
b.age = 21
console.log(a) //{ age: 21 }
console.log(b) //{ age: 21 }
var c = b
console.log(c) //{ age: 21 }
引用类型可以扩展属性:
var a = {age:20}
a.name = '张三'
a.ccc = 1000
console.log(a) //{ age: 20, name: '张三', ccc: 1000 }
数组的属性扩展:
var arr = [1,2,3]
arr.age = 21
console.log(arr) //[ 1, 2, 3, age: 21 ]
var arr2 = arr
console.log(arr2) //[ 1, 2, 3, age: 21 ]
函数:
function fn(){}
fn.age = 21
var fn1 = fn
console.log(fn) //{ [Function: fn] age: 21 }
console.log(fn1) //{ [Function: fn] age: 21 }
三、typeof
typeof只能区分值类型的具体类型,不能区分引用类型的具体类型,引用类型只能区分引用类型的function类型,要注意的是typeof null也是object。
四、变量计算
- ==的强制类型转化
var b = 100 + '10' //'10010 强制转化nuber类型的100为字符串类型
100 == '100' //true 强制转化nuber类型的100为字符串类型
null == '' //true 强制转化null和''为false
null == undefined //true //强制转化null和undefined为false
- if的强制类型转化
var a = true
if(a) {
}
var b = 100
if(b) {
}
var c = ''
if(c) {
}
if里面当false使用的有:0、NaN、' '、null、undefined、false
- 逻辑运算
console.log(10 && 0) //0 将10强制转换为true,然后和0与,返回了0
console.log('' || 'abc') //true 将空转化为false,然后和'abc'或
console.log(!window.abc) //将window.abc本来是undefined,然后转化为false
//判断一个变量是true或者false
var a = 100
console.log(!!a) //true
五、内置函数
console.log(Object) //[Function: Object]
console.log(Array) //[Function: Array]
console.log(Function) //[Function: Function]
......
六、内置对象
console.log(Math) //{}
console.log(JSON) //{}
......
七、==和===
我们如果查看某个对象的属性是不是存在,可以使用==。在函数的参数是不是存在可以用==。
if(obj.a == null){
}
funciton(a,b){
if(a == null){
}
}
//要保证obj和a是定义的