1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <meta http-equiv="X-UA-Compatible" content="IE=edge">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0">
7 <title>数据类型</title>
8 </head>
9 <body>
10 <script>
11 /*
12 JavaScript 数据类型
13 */
14 /*
15 1.值类型(基本类型):(6种)存在栈中,按值访问,操作的是他们实际保存的值;
16 1.1 字符串(String)
17 1.2 数字(Number)
18 1.3 布尔(Boolean)
19 1.4 对空(Null)
20 1.5 未定义(Undefined)
21 1.6 Symbol (Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。)
22 2.引用数据类型:栈中保存地址,堆中保存值,按引用访问,当查询时,我们需要先从栈中读取内存地址,然后再顺藤摸瓜地找到保存在堆内存中的值;
23
24 引用数据类型主要用于区别基本数据类型,描述的是具有属性和函数的对象。
25 常用的有Object类型、Array类型、Date类型、RegExp类型、Math类型、Function类型以及基本数据类型的包装类型(Number、String......)
26
27 2.1 对象(Object)
28 2.2 数组(Array)
29 2.3 函数(Function)
30 2.4 日期(Date)
31 2.5 基本数据类型包装类型(Number、String......)
32 */
33
34 //1.值类型(基本类型):(6种)
35 //1.1 字符串(String)
36 /*
37 String 类型的独特之处在于,它是唯一没有固定大小的原始类型。
38 可以用字符串存储 0 或更多的 Unicode 字符,有 16 位整数表示(Unicode 是一种国际字符集)。
39 */
40 var sColor1 = "red";
41 var sColor2 = 'red';
42 console.log(typeof(sColor1))//string
43 console.log(typeof(sColor2))//string
44 //1.2 数字(Number)
45 /*
46 ECMA-262 中定义的最特殊的类型是 Number 类型。
47 这种类型既可以表示 32 位的整数,还可以表示 64 位的浮点数。
48 */
49 //a、十进制
50 var iNum = 86;
51 console.log(typeof(iNum))//number
52 //b、八进制数和十六进制数
53 /*
54 整数也可以被表示为八进制(以 8 为底)或十六进制(以 16 为底)的字面量。
55 八进制字面量的首数字必须是 0,其后的数字可以是任何八进制数字(0-7)
56
57 要创建十六进制的字面量,首位数字必须为 0,后面接字母 x,然后是任意的十六进制数字(0 到 9 和 A 到 F)。
58 这些字母可以是大写的,也可以是小写的。
59
60 提示:尽管所有整数都可以表示为八进制或十六进制的字面量,但所有数学运算返回的都是十进制结果。
61 */
62 var iNum = 070; //070 等于十进制的 56
63
64 var iNum = 0x1f; //0x1f 等于十进制的 31
65 var iNum = 0xAB; //0xAB 等于十进制的 171
66 console.log(typeof(iNum))//number
67 //c、浮点数
68 /*
69 要定义浮点值,必须包括小数点和小数点后的一位数字(例如,用 1.0 而不是 1)。
70 这被看作浮点数字面量。
71 对于浮点字面量的有趣之处在于,用它进行计算前,真正存储的是字符串。
72 */
73 var fNum = 5.0;
74 console.log(typeof(fNum))//number
75 //d、科学计数法
76 /*
77 对于非常大或非常小的数,可以用科学计数法表示浮点数,可以把一个数表示为数字(包括十进制数字)加 e(或 E),后面加乘以 10 的倍数。
78
79 提示:也可用 64 位 IEEE 754 形式存储浮点值,这意味着十进制值最多可以有 17 个十进制位。
80 17 位之后的值将被裁去,从而造成一些小的数学误差。
81 */
82 var fNum = 5.618e7//该符号表示的是数 56180000。把科学计数法转化成计算式就可以得到该值:5.618 x 107。
83 //e、特殊的 Number 值
84 /*
85 几个特殊值也被定义为 Number 类型。
86 前两个是 Number.MAX_VALUE 和 Number.MIN_VALUE,它们定义了 Number 值集合的外边界。
87 所有 ECMAScript 数都必须在这两个值之间。
88 不过计算生成的数值结果可以不落在这两个值之间。
89
90 当计算生成的数大于 Number.MAX_VALUE 时,它将被赋予值 Number.POSITIVE_INFINITY,意味着不再有数字值。
91 同样,生成的数值小于 Number.MIN_VALUE 的计算也会被赋予值 Number.NEGATIVE_INFINITY,也意味着不再有数字值。
92 如果计算返回的是无穷大值,那么生成的结果不能再用于其他计算。
93
94 事实上,有专门的值表示无穷大,(如你猜到的)即 Infinity。
95 Number.POSITIVE_INFINITY 的值为 Infinity。
96 Number.NEGATIVE_INFINITY 的值为 -Infinity。
97
98 由于无穷大数可以是正数也可以是负数,所以可用一个方法判断一个数是否是有穷的(而不是单独测试每个无穷数)。
99 可以对任何数调用 isFinite() 方法,以确保该数不是无穷大。
100
101
102 最后一个特殊值是 NaN,表示非数(Not a Number)。
103 NaN 是个奇怪的特殊值。
104 一般说来,这种情况发生在类型(String、Boolean 等)转换失败时。
105 例如,要把单词 blue 转换成数值就会失败,因为没有与之等价的数值。
106 与无穷大一样,NaN 也不能用于算术计算。
107 NaN 的另一个奇特之处在于,它与自身不相等
108 */
109 var iResult = iNum * 2;
110 if (isFinite(iResult)) {
111 console.log("finite");
112 }
113 else {
114 console.log("infinite");
115 }
116 //1.3 布尔(Boolean)
117 /*
118 Boolean 类型是 ECMAScript 中最常用的类型之一。它有两个值 true 和 false (即两个 Boolean 字面量)。
119 即使 false 不等于 0,0 也可以在必要时被转换成 false,这样在 Boolean 语句中使用两者都是安全的。
120 */
121 var bFound = true;
122 var bLost = false;
123 //1.4 对空(Null)
124 /*
125 Null是只有一个值的类型,它只有一个专用值 null,即它的字面量。
126 值 undefined 实际上也是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。
127 */
128 console.log(null == undefined); //输出 "true"
129 //1.5 未定义(Undefined)
130 /*
131 Undefined 类型只有一个值,即 undefined。
132 当声明的变量未初始化时,该变量的默认值是 undefined。
133 当函数无明确返回值时,返回的也是值 "undefined"。
134 */
135 var oTemp;
136 console.log(oTemp == undefined);//输出 "true"
137 console.log(typeof oTemp); //输出 "undefined"
138 /*提示:值 undefined 并不同于未定义的值。但是,typeof 运算符并不真正区分这两种值。*/
139 /*前面的代码对两个变量输出的都是 "undefined",即使只有变量 oTemp2 从未被声明过。
140 如果对 oTemp2 使用除 typeof 之外的其他运算符的话,会引起错误,因为其他运算符只能用于已声明的变量上。*/
141 var oTemp;
142 console.log(typeof oTemp); //输出 "undefined"
143 console.log(typeof oTemp2); //输出 "undefined"
144
145 function testFunc() {}
146 console.log(testFunc() == undefined); //输出 "true"
147 //1.6 Symbol (Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。)
148 /*
149 ES6 引入了一种新的原始数据类型 Symbol ,表示独一无二的值,最大的用法是用来定义对象的唯一属性名。
150 Symbol 的值是唯一的,所以不会出现相同值得常量,区别于const,字符串不能保证常量是独特的。
151 */
152 let sy = Symbol("KK");
153 let sy1 = Symbol("KK");
154 console.log(sy)//输出 Symbol(KK)
155 console.log(sy1)//输出 Symbol(KK)
156 console.log(sy==sy1)//输出 false
157 //2.引用数据类型:
158 /*
159 引用数据类型相比于基本数据类型:
160 引用数据类型需要通过关键词new生成
161 引用数据类型的值是可变的,基本数据类型是不可变的
162 引用数据类型变量赋值传递的是内存地址
163 引用数据类型比较是对内存地址的比较,基本数据类型的比较是对值得比较
164 */
165 //2.1 对象(Object)
166 /*
167 Object 对象自身用处不大,不过在了解其他类之前,还是应该了解它。
168 因为 ECMAScript 中的 Object 对象与 Java 中的 java.lang.Object 相似,
169 ECMAScript 中的所有对象都由这个对象继承而来,
170 Object 对象中的所有属性和方法都会出现在其他对象中,
171 所以理解了 Object 对象,就可以更好地理解其他对象。
172 */
173 var obj = new Object();//创建一个对象
174 o.name = 'obj';//为对象添加name属性并赋值‘obj’
175
176 /*
177 ***Object 对象的方法***
178 hasOwnProperty(property)
179 判断对象是否有某个特定的属性。必须用字符串指定该属性。(例如,o.hasOwnProperty("name"))
180
181 IsPrototypeOf(object)
182 判断该对象是否为另一个对象的原型。
183
184 PropertyIsEnumerable
185 判断给定的属性是否可以用 for...in 语句进行枚举。
186
187 ToString()
188 返回对象的原始字符串表示。对于 Object 对象,ECMA-262 没有定义这个值,所以不同的 ECMAScript 实现具有不同的值。
189
190 ValueOf()
191 返回最适合该对象的原始值。对于许多对象,该方法返回的值都与 ToString() 的返回值相同。
192
193 注释:上面列出的每种属性和方法都会被其他对象覆盖。
194 */
195 //2.2 数组(Array)
196 /*
197
198 */
199 //2.3 函数(Function)
200 /*
201
202 */
203 // 2.4 日期(Date)
204 /*
205
206 */
207 //2.5 基本数据类型包装类型(Number、String......)
208 /*
209
210 */
211 </script>
212 </body>
213 </html>