为了方便操作基本数据类型,JavaScript还提供了三个特殊的引用类型:String/Number/Boolean
// 下面代码的问题?
// s1是基本类型,基本类型是没有方法的
var s1 = 'zhangsan';
var s2 = s1.substring(5);
// 当调用s1.substring(5)的时候,先把s1包装成String类型的临时对象,再调用substring方法,最后销毁临时对象, 相当于:
var s1 = new String('zhangsan');
var s2 = s1.substring(5);
s1 = null;
<script>
var str = "abc";
//求字符串的长度
console.log(typeof(str)); //string 是对象吗? 不是,是基本数据类型
//我们说只有对象才有拥有属性和方法
//拿下面的str作为基本数据类型为什么会有属性呢?
console.log(str.length);
/*
var s = new String("abc"); //s就是对象了
console.log(s.length);
*/
</script>
<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>
创建基本包装类型的对象
<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>
<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>
<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>
<script>
console.log("123".length);
//装箱 : 把基本数据类型包装成引用类型
//拆箱 : 把引用类型转换成基本数类型
var s = new String("aaa");
console.log(typeof(s));
//valueOf() 获取原始值 --->拆箱
var s1 = s.valueOf();
console.log(typeof(s1));
</script>