转载请注明预见才能遇见的博客:https://my.csdn.net/
原文地址:https://blog.csdn.net/weixin_42787326/article/details/81334482
JavaScript基本类型、引用类型、基本包装类型
目录
1.基本类型(简单类型),值类型: number,string,boolean
2.基本包装类型 String Number Boolean
原始数据类型: number,string,boolean,undefined, null,object
1.基本类型(简单类型),值类型: number,string,boolean
- 值类型的值在哪一块空间中存储? 栈中存储
- var num=10;//值类型,值在栈上
- 值类型之间传递,传递的是值
- 值类型作为函数的参数,传递的是值
2.基本包装类型 String Number Boolean
- 普通变量不能直接调用属性或者方法
- 对象可以直接调用属性和方法
- 基本包装类型:本身是基本类型,但是在执行代码的过程中,如果这种类型的变量调用了属性或者是方法,那么这种类型就不再是基本类型了,而是基本包装类型,这个变量也不是普通的变量了,而是基本包装类型对象
- 基本类型对应基本包装类型:string--String number--Number boolean--Boolean
引用类型与基本包装类型的区别:在于对象的生命周期。
使用new关键字创建的引用类型的实例,对象在当前作用域都存在。而基本包装类型自动创建的对象则在对象被调用的时刻存在,调用完毕后,就被销毁不存在了。
Object()构造函数,可以根据你传入的参数的类型,返回基本包装类型的实例。你传入字符串,则返回String类型的实例;传入数字,则返回Number类型的实例;传入布尔值,则返回Boolean类型实例。如:
var obj = new Object("hello,1024idea");
console.log(obj instanceof String);// true
注意:使用new关键字创建的构造函数与使用同名的转型函数的效果是不一样的。如:
// 构造函数与转型函数返回值的区别
var str = "1024";
var strObj = new String(str);
console.log(typeof strObj);//object
var strNum = Number(str);
console.log(typeof strNum);//number
这个例子中,变量strObj保存的是object类型,而变量strNum保存的是number类型。
一般情况下,是不建议手动的去创建基本包装类型的对象,因为这样经常造成的问题是,分不清自己是在处理基本包装类型还是引用类型。
3.复杂类型(引用类型):object
- 引用类型的值在哪一块空间中存储?对象在堆上存储,地址在栈上存储
- var obj={};//复杂类型,对象在堆,地址(引用)在栈
- 引用类型之间传递,传递的是地址(引用)
- 引用类型作为函数的参数,传递的是地址
var obj={
name:"小明"
};
function f2(obj2) {
obj2.name="小红";
}
console.log(obj.name);//小明
f2(obj);
console.log(obj.name);//小红
4.空类型:undefined,null
5.基本类型和引用类型的总结
- 值类型的值在哪一块空间中存储? 栈中存储
- 引用类型的值在哪一块空间中存储?对象在堆上存储,地址在栈上存储
- var num=10;//值类型,值在栈上
- var obj={};//复杂类型,对象在堆,地址(引用)在栈
- 值类型之间传递,传递的是值
- 引用类型之间传递,传递的是地址(引用)
- 值类型作为函数的参数,传递的是值
- 引用类型作为函数的参数,传递的是地址
6.基本包装类型Number Boolean 扩展
1.Boolean类型
Boolean类型是布尔值创建的引用类型。创建Boolean类型,可以使用Boolean构造函数去创建,并传入true或者false参数。如:
var booleanObject = new Boolean(true);
注意:在布尔表达式中使用Boolean对象,我们可能会出错的一些地方,如:
var booleanObj = new Boolean(false);
var result = booleanObj && true;
console.log(result);
你觉得上面会打印出什么结果呢?大多数人可能会说是false,因为一真一假嘛,所以为false。但是,事实上结果是true,因为booleanObj是一个对象,在布尔表达式中,所有的对象都会被转换为true。记住:引用类型的布尔值,其实是对象。
当然,我们不推荐这么用(不推荐用引用类型的布尔值来判断布尔表达式)
console.log(Boolean(0));//false
console.log(Boolean(null));//false
console.log(Boolean(undefined));//false
console.log(Boolean(false));//false
console.log(Boolean(NaN));//false
2.Number 类型
Number类型是数字值创建的引用类型。创建Number类型,使用Number类型的构造函数,可以传递数字值参数,如:
var numberObj = new Number(1024);
这里介绍一个Number类型的一个方法:numberObj.toFixed();可以接受一个数值,表示保留的小数的个数(会自动四舍五入)。在平时项目中,我们经常要处理价格问题或者增长率问题,即保留多少为小数,用这个方法非常有效。
// Number 类型
var numberObj = new Number(1024.153);
console.log(numberObj.toFixed(2));//1024.15
console.log(numberObj.toFixed(1));//1024.2
3.String类型
String类型是字符串值创建的引用类型。
String类型创建的方式,使用String构造函数创建,可以传入字符串参数;如:
var stringOjb = new String(“hello,1024idea”);
JavaScript基本类型、引用类型、基本包装类型
博客地址:https://blog.csdn.net/weixin_42787326/article/details/81334482