概述
今天上班,无意看到了一个网页,又学了个知识点“基原数据”,这两个小时算没白费。
/*
关于new String()引发的问题
var s1 = new String("s1");
就这么一句话,引发了将近2个小时的试验,所以不得不记录一下~
问题来源:ide提示:"primitive type object wrapper used";
意思是"原始类型对象已经被包装好了~"(瞎翻译啊~)
* */
//1,chrome的浏览器输出有PrimitiveValue个东西。PrimitiveValue:原始值(专业:基原数据)
var str = "Hello World";
var objStr = new String(str);//这里有警告,原始类型对象已经被包装好了
console.log(objStr);//chrome:String {0: "H", 1: "e", 2: "l", 3: "l", 4: "o", 5: " ", 6: "W", 7: "o", 8: "r", 9: "l", 10: "d",
// length: 11, [[PrimitiveValue]]: "Hello World"}
console.log(typeof objStr);//object
console.log(typeof str);//string
console.log(objStr == str);//true;
console.log(objStr === str);//false;
objStr.appendName = "name";//这里有警告,说是能把原始的值覆盖掉。
console.log(objStr==str);//true;只拿原始值比较。
//2,new Object登场
/**语法:
* Object对象(或称之为Object()函数),其语法有以下两种:
用法一:充当Object对象的构造函数使用,用于结合new关键字构造一个新的Object对象。
Object()会根据传入参数的类型返回一个对应类型的对象。
new Object( [ value ] )
用法二:当作普通函数使用,其行为与用法一(使用new关键字)完全一致,相当于用法一省略了new关键字。
Object( [ value ] )
参数描述
value可选/任意类型需要包装为对象的值。
Object()将会根据参数value的数据类型,返回对应类型的对象:
如果value为基元数据类型Boolean、Number、String,则返回对应类型的对象,
例如:Boolean对象、Number对象、String对象。
如果value本身为对象,则不对其作任何更改,返回其本身。
如果省略了value参数,或value为null、undefined,则返回自身无任何属性的Object对象。
* */
console.log("---------------");
var obj = new Object(str);//这里没有有警告
console.log(obj);//chrome:String {0: "H", 1: "e", 2: "l", 3: "l", 4: "o", 5: " ", 6: "W", 7: "o", 8: "r", 9: "l", 10: "d",
// length: 11, [[PrimitiveValue]]: "Hello World"}
console.log(typeof obj);//object
console.log(obj == str);//true;
console.log(obj === str);//false;
obj.appendName = "name";//这里没有警告
console.log(objStr==str);//true;只拿原始值比较。
//通过上面比较new Object比new String要省却了2个警告,而且效果一摸一样。
//那么问题来了,new String干什么用呢?
/**
String对象(或称之为String()函数),其语法有以下两种:
1、充当String对象的构造函数使用,用于结合new关键字构造一个新的String对象。
new String( [ str ] )
2、当作普通函数使用,将其它数据类型转换为String数据类型的原始字符串。简而言之,这是一个类型转换函数。
String( [ str ] )
参数 描述
str 可选/任意类型表示字符串的任意值,默认为空字符串("")。
如果参数value不是字符串,则调用该参数的toString()方法,将其转为字符串。
返回值
1、如果String()函数被当做String对象的构造函数来使用,则以new关键字构造一个新的String对象(String类型)。
该String对象表示参数所指定的字符串值。
2、如果String()函数被当作普通函数使用,则返回转换后的String数据类型的数值。
注意:大多数时候,你无需显示地通过new关键字来构造一个String对象,因为在JavaScript中,
String对象和String数据类型是相通的,你可以在String数据类型的变量上直接使用String对象的所有属性和方法。*/
console.log("---------------");
var strObj = new String( "CodePlayer" );
str = "CodePlayer";
//String数据类型也可以直接调用String对象的属性和方法
console.log( strObj.constructor === String ); //true
console.log( strObj.constructor === str.constructor ); //true
console.log( strObj.substring( 0, 4 ) ); //Code
console.log( str.substring( 0, 4 ) ); //Code
// 字面值形式的String数据类型也可以直接调用String对象的属性和方法
console.log( "Hello World".substring( 6, 11 ) ); // World
console.log("---------------");
// 添加自定义属性
strObj.newProperty = "String对象的新属性";
str.newProperty = "String数据类型的新属性";
// 修改内置的方法
strObj.substring = function (start, end){
return "修改String对象的substring()方法";
};
str.substring = function (start, end){
return "修改String数据类型的substring()方法";
};
console.log( strObj.newProperty ); // String对象的新属性
console.log( str.newProperty ); //undefined.添加的属性未生效
console.log( strObj.substring(0, 4) ); // 修改String对象的substring()方法
console.log( str.substring(0, 4) ); //Code,修改的方法也未生效,使用其内置的方法
/**总结:
* 1:new Object()和Object()效果一样。
* 2:new String()用new Object()或者Object()替代。
* 3:String()可以看成是转换函数:如果参数value不是字符串,则调用该参数的toString()方法,将其转为字符串。
* 4:如果想用对象,就Object();想转成字符串就String()
*
* 参考:http://www.365mini.com/page/javascript-new-string.htm
*
http://www.365mini.com/page/javascript-new-object.htm
* */
网站上内容总结的很好啊,收藏之~~
最后
以上就是勤奋可乐为你收集整理的[提高总结八]new String()引发的问题的全部内容,希望文章能够帮你解决[提高总结八]new String()引发的问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复