为了便于操作基本类型值,ECMAScript 提供了 3 个特殊的引用类型:Boolean、Number和 String。这些类型与其他引用类型相似,但同时也具有与各自的基本类型相应的特殊行为。实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而能够调用一些方法来操作这些数据。
2.知识剖析
new运算符
var box = 'Mr. Lee';
box.name = 'Lee';//无效属性
box.age = function () {//无效方法
return 100;
};
console.log(box);//Mr. Lee
console.log(box.name);//undefined
console.log(box.age());//错误
box.name = 'Lee';//有效属性
box.age = function () {//有效方法
return 100;
};
console.log(box);//Mr. Lee
console.log(box.name);//Lee
console.log(box.age());//100
String、Boolean 和 Number都可以使用new操作符
String类型
创建: var stringObject = new String("text");
属性:length: 表示字符串中包含多少个字符
方法: 1.charAt(): 返回对应位置的特定字符,参数为基于0的位置。
2.charCodeAt(): 返回对应位置的字符编码,参数为基于0的位置。
var stringValue = new String("hello world");
console.log(stringValue.charAt(1)); //e
console.log(stringValue.charCodeAt(1)); //101Boolean类型
var Booleanobject=new Boolean(true);
强调:布尔表达式中的所有对象都会被转换为true。
Number类型
Number 是原始数值的包装对象。
var numberobject=new Number(10);
Number具有的属性有最小值、最大值等。
Number 类型的方法toString()将数值转化为字符串,并且可以转换进制
toLocaleString()根据本地数字格式转换为字符串
toFixed()将数字保留小数点后指定位数并转化为字符串
toExponential()将数字以指数形式表示,保留小数点后指定位数并转化为字符串
toPrecision()将数字以指数形式或点形式表示,保留小数点后面指定位数并转化为字符串
toFixed()方法:会按照指定的小数位返回数值的字符串表示
var num=10;
console.log(num.toFixed(2));//10.00
这里给toFixed()传入数值2,表示显示2位小数。
var box = 1000.789;
console.log(box.toString());//转换为字符串,传参可以转换进制
console.log(box.toLocaleString());//本地形式,1,000.789
console.log(box.toFixed(2));//小数点保留,1000.79
console.log(box.toExponential());//指数形式,传参会保留小数点
console.log(box.toPrecision(3));//指数或点形式,传参保留小数点
3.常见问题
如何替换子字符串的内容?
4.解决方案
使用replace()的方法
var h = "cat, bat, sat, fat";
console.log(h.replace("at", "ond"));
console.log(h.replace(/at/g, "end"));
5.编码实战
6.扩展思考
7.参考文献
一、javascript基本包装类型介绍
二、JavaScript:基本包装类型 - 萧萧弈寒 - 博客园
三、javaScript对象-基本包装类型的详解 - 心知梦圆 - 博客园
四、javascript学习——基本包装类型总结 - CSDN博客
五、js之基本包装类型 - 小小gogo - 博客园
8.更多讨论
问题一
javascript中基本类型和引用类型的关系是什么?
答:
是相互独立的关系,js中变量分类为1.基本类型:变量的内容保存在变量的本地。2.引用类型:变量的内容不保存在变量的本地而是保存在内存的其他地方,变量中保存的是这个内存的地址的值。
问题二
为什么 Boolean 类型没有特定的属性或者方法?
答:Boolean构造出来的对象没有特定的属性或方法,布尔表达式中的所有对象都会被转换为true。
问题三
引用类型与基本包装类型有什么不同?
答:
在于对象的生命周期。
使用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类型。
一般情况下,是不建议手动的去创建基本包装类型的对象,因为这样经常造成的问题是,分不清自己是在处理基本包装类型还是引用类型。