为了方便操作基本数据类型,JavaScript还提供了三个特殊的引用类型:String/Number/Boolean
// 下面代码的问题?
// s1是基本类型,基本类型是没有方法的

  1. var s1 = 'zhangsan';
  2. var s2 = s1.substring(5);

image.png

// 当调用s1.substring(5)的时候,先把s1包装成String类型的临时对象,再调用substring方法,最后销毁临时对象, 相当于:

  1. var s1 = new String('zhangsan');
  2. var s2 = s1.substring(5);
  3. s1 = null;
  1. <script>
  2. var str = "abc";
  3. //求字符串的长度
  4. console.log(typeof(str)); //string 是对象吗? 不是,是基本数据类型
  5. //我们说只有对象才有拥有属性和方法
  6. //拿下面的str作为基本数据类型为什么会有属性呢?
  7. console.log(str.length);
  8. /*
  9. var s = new String("abc"); //s就是对象了
  10. console.log(s.length);
  11. */
  12. </script>

image.png

    <script>
        var str1 = "abc";  //基本数据类型  string
        var str2 = "abc";  //基本数据类型  string
        var str3 = new String("abc");  //引用类型  String  会在堆区开辟一块空间
        var str4 = new String("abc");  //引用类型  String  会在堆区开辟一块空间

        //console.log(typeof(str1));
        //console.log(typeof(str3));

        console.log(str1 == str2); //true  双等号对于基本数据而言,==比较的是值是否相等
        console.log(str2 == str3); //true  
        console.log(str2 === str3);
        //false  三等号比较的是值和类型是否一致,str2是string类型,str3是object类型
        console.log(str3 == str4);//false  双等号对于引用类型而言,比较的是地址是否一致
    </script>

image.png

创建基本包装类型的对象

    <script>
        var num = 18;               //数值,基本类型
        var num = Number('18');      //类型转换,将字符串18转换为数值类型
        var num = new Number(18);    //基本包装类型,对象
        // Number和Boolean基本包装类型基本不用,使用的话可能会引起歧义。例如:
        var b1 = new Boolean(false);
        var b2 = b1 && true;        // 结果是什么
        console.log(b2);
    </script>

image.png

    <script>
        //声明一个变量num,他是string类型,基本数据类型
        var num = "18";

        //Number("18") 将字符串string转换number类型,基本数据类型
        var num1 = Number("18");

        //new Number("18")  创建一个对象
        var num2 = new Number("18");
        console.log(num2);
    </script>

image.png

    <script>
        var a = false; //基本数据类型  boolean  值是false
        var b = new Boolean(false);  //引用类型  object    值是false

        if(a){
            console.log("aaa");
        }

        //只要值不是0  空字符串   null   undefined  等都认为是true
        //if(对象){表达式}  这里面的表达式肯定会执行,因为对象为true
         if(b){
            console.log("bbb");
        }

    </script>

image.png

    <script>
        console.log("123".length);
        //装箱 : 把基本数据类型包装成引用类型
        //拆箱 :  把引用类型转换成基本数类型
        var s = new String("aaa");
        console.log(typeof(s));

        //valueOf()  获取原始值  --->拆箱
        var s1 = s.valueOf();
        console.log(typeof(s1));
    </script>

image.png