变量的类型和计算
这篇文章是在学习JS变量时的一些知识点整理,只是并不全面。
类型部分
变量可以分成两个类型:值类型和引用类型
值类型:number
string
boolean
undefined.
- 变量值类型的特点:不会因为赋值而相对干预。
var a = 100;
var b = a;
a = 200;
console.log(b);//100
var c = b;
console.log(c);//100
b = 300;
console.log(c);//100
引用类型:Function
Object
Array
- 变量引用类型的特点:引用类型的赋值,并不是对象的传递,而是是对指针的复制,所有的变量都指向同一个对象。
表现在储存上就是,只储存有一个对象,所有的变量都是按指针指向的对象对对象进行调用。因为对象可以有无限多个属性,过多属性会占用大量内存,这种用指针调用方式避免了对象传递占用过多内存的问题。
在对象中
var a = {age:20};
var b = a;
console.log(b); //Object{age:20}
console.log(a); //Object{age:20}
b.age = 21;
console.log(b); //Object{age:21}
console.log(a); //Object{age:21}
数组中的对象也有同样的表现
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]
arr2.age = 22;
console.log(arr); //[1,2,3,age:22]
函数也有同样的特性
function fn() {};
fn.age = 21;
var fn1 = fn;
console.log(fn1.age); //21
fn1.age = 22;
console.log(fn.age); //22
- 类型检测:
typeof
typeof
检测返回的数据类型有六种:undefined
string
boolean
number
object
function
不过typeof
只可以区分出值类型,对于引用类型就无能为力了,检测object
和array
以及null
时都会返回"object"
。另外,引用类型中function
可以区分出来, 因为function
相对于其他引用类型(如对象、数组)来说,具有非常特殊的意义,在JS 中函数非常重要。
如果想要准确判断引用类型的话,可以使用instanceof
操作符
var age
console.log(typeof age); //"undefined" 对未初始化和未声明的变量执行typeof操作符都会返回"undefined"值
console.log(typeof "字符串"); //"string"
console.log(typeof true); //"boolean"
console.log(typeof 10); //"number"
console.log(typeof fn); //"function"
console.log(typeof null); //"object"
console.log(typeof [1,2]); //"object"
console.log(typeof {a:1,b:2}); //"object"
var a = [1, 2]
console.log(a instanceof Array); //true
计算部分
- 强制类型转换 在值类型的运算中,需要特别注意和利用强制类型转换这一特性。
- 加号"+"操作符 number和string相加时,会把number转换成string然后再连接起来
console.log(100 + 10); //110
console.log(100 + '10'); //"10010"
- 相等"=="操作符 先转换操作数(通常称为“强制转型”),再比较相等性
console.log(100 == '100'); //true
console.log('' == 0); //true
console.log(null == undefined); //true
- 全等"==="操作符 除了比较之前不转换操作数之外,和相等操作符之间没有任何区别
console.log(100 === '100'); //false
console.log('' === 0); //false
console.log(null === undefined); //false
怎么判断什么时候用"==",什么时候用"==="? 当判断一个对象的属性是否存在和在函数中判断其参数是否存在时,用"==",其余情况下用"==="
var obj = {};
if(obj.a == null) {}; //这里"obj.a == null"相当于"obj.a === null || obj.a ===undefined"的简写形式
function(a,b){if(a == null){...}}; 这里使用的前提是,判断的对象obj.a和a都是进行过定义的,没定义判断会报错
- if条件操作符
if(100) {console.log(110)}; //输出:110 这里的100返回的是true
if('') {console.log((110))}; //没有任何输出,这里‘’返回的是false
在if条件操作符中,会返回false的几种特殊情况
if(0){};
if(NaN){};
if(''){};
if(null){};
if(undefined){};
if(false){};
- “&&” “||” "!"布尔操作符
console.log(10 && 0); //0
console.log('' || 'abc'); //"abc"
可以通过"!!"来快速判断一个变量将会被if转换成什么
var a = 100;
console.log(!!a); //true
var b = '';
console.log(!!b); //false
其他部分
- JS中的内置函数
Object();
Array();
Function();
String();
Number();
Boolean();
Data();
RegExp();
Error();
- JS中的内置对象
Math;
JSON;