您的位置:首页 > Web前端 > JavaScript

JavaScript笔记:原始值对象包装类

2018-10-28 22:39 204 查看
版权声明:本人原创文章,转载请注明出处 https://blog.csdn.net/qq_28766729/article/details/83479475

原始值有数字、字符串、布尔值、undefined、null。

但是在JavaScript中,

  • 数字可分为:原始值数字,数字类型对象。

  • 字符串可分为:原始值字符串,字符串类型对象。

  • 布尔值可分为:原始值布尔值,布尔值类型对象。

  • 但是undefined、null没有上面这些东西。

可以像下面这样生成原始值对象:

var num = new Number(123);

var str = new String('abcd');

var bol = new Boolean('true');
------------------------
num
Number {123}
------------------------
str
String {"abcd"}
------------------------
bol
Boolean {true}

下面讲讲包装类

在下面代码中,num并不是一个对象,所以它不包含属性和方法,应该报错,但是并没有。

var num = 4;
num.len = 3; // 在这里num是原始值,原始值没有方法函数,那怎么办呢
// 创建new Number(4).len = 3; 系统会创建数字类型对象,是为了不让系统报错, 然后会delete
console.log(num.len);
// 创建new Number(4).len; 同样是为了不报错
----------------------------------
输出结果为:undefined

在num.len = 3; 这里,系统会新建一个数字对象new Number(4).len = 3; delete。
让对象的len等于3。然后删除。
当下面语句再访问num.len时,系统又会创建一个new Number(4).len,
但这个对象里面没有值,所以结果会是undefined,这个隐式的环节叫包装类

来一道测试题:

var str = "abcd";
str.length = 2;
console.log(str);
--------------------------
abcd

这里字符串abcd并没有被截断,原理同上。

var str = "abcd";
//为不报错,创建new String('abcd').length = 2;   delete
str.length = 2;
//再访问str时,上面一步对str并没有起作用,没影响,所以还是输出abcd。
console.log(str);
//而如果这里访问console.log(str.length),
//系统会创建,new String('abcd').length,输出其值,4;

再来一道测试题:

var str = "abc";
str += 1;
var test = typeof(str); str = "string"
if(test.length == 6){
test.sign = "typeof的返回结果可能为String";
}
console.log(test.sign);
--------------------------------
undefined

输出结果并不是定义好的字符串,而是undefined。解释如下:

var str = "abc";
str += 1;
var test = typeof(str); str = "string"
if(test.length == 6){
test.sign = "typeof的返回结果可能为String";
//在这创建new String(test).sign = "xxx";
}
//当要再次调用test.sign时,
//又会创建new String(test).sign,这个对象和上面的没关系。这里为空,输出值为undefined。
console.log(test.sign);
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: