JS中string值类型为什么会有length属性、以及其他字符串方法 -- js包装对象

前言

  • JavaScript数据类型包含两种:基本类型(或原始类型)和引用类型;
  • 基本类型的值是保存在栈内存中的简单数据段,是按值来访问的。有 String、Number、Boolean、Undefined、Null;
  • 引用类型的值是保存在堆内存中的对象,是按引用来访问的。有Object、Function、Array、Date、RegExp等;
  • 对象自身是拥有属性方法的,如下:
var arr = [1, 2, 3];
arr.push(4);   // [1, 2, 3, 4]
arr.length;   // 4
  • 基本类型,如string
var str = 'zlq';
console.log(str.length);  // 3
/*
	问题:string作为基本类型,怎么会拥有 length、substring等属性、方法呢?
	原因:基本类型在调用方法是,JS引擎会先对原始类型数据进行包装 -- 基本包装类型。
*/

基本包装类型

步骤:

  1. 创建基本类型的一个实例;
  2. 在实例上调用指定的方法;
  3. 销毁这个实例;

代码说明:

var str = "我是string基本类型的值";
var new_str = new String("我是string基本类型的值");  // 包装处理
var my_str = new_str.substring(5,8);
new_str = null;   // 方法调用之后销毁实例

var str2 = "zlq";
str2.age = 18;
console.log(str.age);   //undefined
  1. 可见,并非string调用了自身的方法,而是后台创建了一个基本包装类型String,从而进行下一步操作。
  2. 基本类型的“销毁性”致使我们不能为基本类型添加属性和方法。

总结
对于基本类型(string、number、boolean),当我们读取这三种基本类型的值时,后台会创建对应的包装类型的实例,然后调用实例指定的方法,调用完就会被销毁。由于这样短暂的生命周期导致我们不能为基本类型添加自己的属性和方法。

你可能感兴趣的:(JS中string值类型为什么会有length属性、以及其他字符串方法 -- js包装对象)