数据类型 堆和栈
基本数据类型
- Number
- String
- Boolean
- Null
- Undefined
特点:
-
存放在栈内存中 栈区包括了 变量的标识符和变量的值
-
值是不可变的 不能给基本类型添加属性和方法
var name = 'jozo'; name.toUpperCase(); // 输出 'JOZO' console.log(name); // 输出 'jozo' var person = 'jozo'; person.age = 22; person.method = function(){//...}; console.log(person.age); // undefined console.log(person.method); // undefined
-
比较是值的比较 (类型转换)
引用数据类型
引用类型可以拥有属性和方法,属性又可以包含基本类型和引用类型
- Array
- Object
- Function
特点
-
值是可变的 可以拥有属性和方法
var person = {};//创建个控对象 --引用类型 person.name = 'jozo'; person.age = 22; person.sayName = function(){console.log(person.name);} person.sayName();// 'jozo' delete person.name; //删除person对象的name属性 person.sayName(); // undefined
-
值同时保存在栈内存和堆内存中 栈中保存
变量标识符
和 指向 堆内存中该对象的指针【对象在堆内存中的地址】(对象的引用)var person1 = {name:'jozo'}; var person2 = {name:'xiaom'}; var person3 = {name:'xiaoq'};
-
比较的是引用的比较 较两个对象的堆内存中的地址是否相同
var person1 = {}; var person2 = {}; console.log(person1 == person2); // false
简单赋值
基本类型在赋值操作后,两个变量是相互不受影响
var a = 10; var b = a; a ++ ; console.log(a); // 11 console.log(b); // 10
对象引用
两个变量都保存了同一个对象地址,则这两个变量指向了同一个对象
var a = {}; // a保存了一个空对象的实例 var b = a; // a和b都指向了这个空对象 a.name = 'jozo'; console.log(a.name); // 'jozo' console.log(b.name); // 'jozo' b.age = 22; console.log(b.age);// 22 console.log(a.age);// 22 console.log(a == b);// true
类型转换
-
转为String
-
.toString()
不可转 null 和 undefined 【报错】var bool=true; console.log(bool.toString());
-
String()
都能转console.log(String(null))
-
隐式转换
num + “”,当 + 两边一个操作符是字符串类型,一个操作符是其它类型的时候,会先把其它类型转换成字符串再进行字符串拼接,返回字符串
-
-
转为Number
-
Number()
可以把任意值转换成数值,如果要转换的字符串中有一个不是数值的字符,返回NaN -
parseInt()
var a="12.3px"; console.log(parseInt(a); //结果:12.3. 如果第一个字符是数字会解析知道遇到非数字结束. var a="abc2.3"; console.log(parseInt(a); 结果:返回NaN,如果第一个字符不是数字或者符号就返回NaN.
-
parseFloat()
字符串转换成浮点数,parseFloat()
和parseInt()
非常相似,不同之处在与,parseFloat()
会解析第一个. 遇到第二个.或者非数字结束如果解析的内容里只有整数,解析成整数 -
隐式转换 字符串除了
+
以外的var str="123"; var num=str-0; console.log(num);
-
-
转为Boolean
-
0 ‘’(空字符串) null undefined NaN 会转换成false 其它都会转换成true
-
Boolean()
console.log(Boolean(1))
-
var message; if(message){};
-
隐式转换
!!
var str="123"; var bool=!!str; console.log(str)
-