JS包装类

new String()
new Boolean()
new Number()

1. 概述

为了便于操作基本类型值,ECMAScript 提供了 3 个特殊的引用类型:Boolean、Number和 String。这些类型与其他引用类型相似,但同时也具有与各自的基本类型相应的特殊行为。实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而能够调用一些方法来操作这些数据。

  • 基本类型:Undefined, Null, Boolean, Number, String
  • 引用类型:Object, Array, Date, RegExp (其实就是对象)

2. 怎么产生的?

eg :

var a = "abc"
console.log(a.length) //3

​ JS中只有对象才有属性和方法,原始值没有属性和方法那么上面求字符串的长度 用length属性不是没有问题吗?

​ 这是因为js中提供了三种特殊的引用类型(String Number Boolean)每当我们给原始值赋属性值时 后台都会给我们偷偷转换 调用包装类,实际走了下面的包装过程?

var a = "abc"
var b = a.length //触发包装类 new String("abc")
console.log(a) //
console.log(b)

var a = "abc"
var s1 = new String("abc")//创建出一个和基本类型值相同的对象
var b = s1.length //对象原型上包含length属性
s1 = null //s1置null并销毁当前实例,再次打印a依然是字符串而不是对象

3. 怎么进行“包装”的?

<script>
 var a = "abc"
 var b = a.substring(2) 
 console.log(b) //abc,还是字符串
 console.log(b)

 1.var s1 = new String("abc")
 2.var b = s1.substring(2)
 3.s1 = null ,并销毁当前实例

</script>
var s1 = "abc"
s1.color = "red"
console.log(s1.color) //underfined

var s2 = String("abc")
s2.color = "red"
console.log(s2.color) //underfined

var s3 = new String("abc")
s3.color = "red"
console.log(s3.color) //red

console.log(s1===s2) //true
console.log(s1==s3) //true
console.log(s1===s3) //false,创建出的是一个和基本类型值相同的对象
posted @ 2021-09-01 09:57  Daeeman  阅读(122)  评论(0编辑  收藏  举报