变量类型
-
基本数据类型:数字、字符串、布尔、Null、Undefined。
-
引用类型:对象、数组、函数。
-
ES6新增:Symbol
let s = Symbol();
typeof s
// "symbol"
- 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
-
typeof只能区分值类型,引用类型区分不了。
-
代码展示如下:
<script>
console.log(typeof undefined);
console.log(typeof 'abc');
console.log(typeof 123);
console.log(typeof true);
console.log(typeof {});
console.log(typeof []);
console.log(typeof null);
console.log(typeof console.log);//函数是个特殊的引用类型,在js中地位很高
console.log(typeof Symbol())
</script>
对应的结果如下:
undefined
string
number
boolean
object
object
object
function
symbol
变量计算
强制类型转换(以下四种会发生):
- 字符串拼接
var a = 100 + 10; //110
var b = 100 + '10'; //'10010'
- ==运算符 和 ===运算符
100 == '100' //true 把100 转换成字符串 '100',所以相等
0 == '' //true 0和 '' 都转换成了false,所以相等
null == undefined //true 都转换成了false,所以相等
所以这个==运算符需要慎重使用!
问题:何时使用== 何时使用===?
if(obj.a == null){
//这里相当于obj.a===null || obj.a===undefined 简写形式
//这是jquery源码推荐的写法,除此之外,其他地方全部用 === 运算符 !!!
}
- if语句
var a = true;
if(a){
//...
}
- 逻辑运算
console.log(10 && 0) // 0
console.log('' || 'abc') //'abc'
console.log(!window.abc) //true
//判断一个变量会被当做true还是false
var a = 100;
console.log(!!a) true