JS中拥有7种原始类型:"字符串",数字型Number,布尔型boolean,属于对象的Null,表示未定义的Undefined,表示系统数据类型的bigint,以及新推出的Symbol(表示唯一),此外这7种原始类型也被称为原始值
console.log(typeof("str")); // 字符串 console.log(typeof(123)); // 数字型 console.log(typeof(true)); // 布尔型 console.log(typeof(null)); // 对象obj console.log(typeof(bigint)); // 还没学到 console.log(typeof(Symbol)); // 表示唯一 console.log(typeof(undefined)); // 表示未定义
7种原始数据类型
这字符串,数字型,布尔型,Symbol型创建后,JS为了让其的属性起作用,所以在被访问时Js会创建一种“对象包装器”,该结构是一种特殊的对象,但要注意的是,每个原始类型的对象包装器都不同,但共同点是:使用后,对象包装器会被销毁
值得注意的是:对象包装器可以用方法的方式去处理
首先是字符串型 ,被访问后会被创建一个拥有相同字符串字面量值相同的对象
let str="str";
//创建一个字符串型
alert(str.toUpperCase());
//在str字符串被访问时,会创建一个拥有相同字面量的对象,并且具有有用的方法
//例如:toUpperCase(),该方法运行会返回一个新的字符串(由alert提醒)
//特殊对象被销毁,只留下原始值str
// toUpperCase()的作用是返回大写化处理的字符串
由此我们可以得出,在字符串被访问时,“对象包装器"被创建,同时由其创建了一个具有相同字面量的特殊对象,但是访问过后,该“对象包装器"被摧毁,只会留下原始值/原始类型
问题来了:我们是否有方法利用"对象包装器“来储存额外的数据?
那么我们来测试一下
let str="str";
//创建一个字符串的原始值
str.text="text";
//访问该字符串的原始值,并创建一个新的属性
alert(str.text);//Undefined
/*
看来并不能存储额外的数据
原因是在str访问后创建新属性结束后,该字符串的对象包装器被销毁
所以在调用该属性时会出现Undefined
如果是在严格模式下,会出现TypeError
*/
结果是不能的,并且如果在严格模式下这样做,会提醒你TypeError,所以我们可以得出一个结果,”对象包装器"无论是使用方法,还是在存储新属性时,在该行为结束后,都会被销毁
此外我们也得出了一个结论,原始类型不能存储额外的数据