数据类型可以做什么?
①避免浪费内存防止内存不够用
②解决“存”的问题:决定使用此类型需要开辟内存空间大小
③解决“取”的问题:改变看内存视角,可以一个类型一个类型的看,而非一个比特位一个比特位的看。
1.整形:
其中每个整形又分为有符号类型的和无符号类型的即unsigned x和signed x,一般而言int是signed int其他也相似,特别的char有三种char,unsigned char,char到底是有符号还是无符号取决于编译器的实现。 有符号类型与无符号类型数据“有效”的二进制位不同,最大值不同,范围不同,就比如int的有符号和无符号,一个范围是-231
231-1,另外一个是02^32-1.
2.浮点数 float[4字节]: 精度较低,存储数值范围较小 double[8字节]: 精度较高
3.构造类型/自定义类型
数组类型
结构体类型 关键字 struct
枚举类型 关键字 enum
联合类型 关键字 union
- 指针类型 int*,char*,void等[4/8字节]
由于在C语言中是这样的数据类型,为了两者更容易区分,或者两者不会打架,JS的数据类型是这样的:
ECMAScript 有 6 种简单数据类型(也称为原始类型):Undefined(未定义) 、Null、Boolean(布尔值) 、Number(数值) 、 String(字符串) 和 Symbol(符号) 。Symbol(符号)是 ECMAScript 6 新增的。还有一种复杂数据类型叫 Object(对象) 。Object 是一种无序名值对的集合。因为在 ECMAScript 中不能定义自己的数据类型,所有值都可 以及上述 7 种数据类型之一来表示。只有 7 种数据类型似乎不足以表示全部数据。但 ECMAScript 的数 据类型很灵活,一种数据类型可以当作多种数据类型来使用。
** Undefined和null的区别? Null 类型 同样只有一个值,即特殊值null。逻辑上讲,null值表示一个空对象指针,这也是给typeof传一个null,会返回object的原因:
let handles = null;
console.log( typeof car); // object
undefined 值是由 null 值派生而来的,因此 ECMA-262 将它们定义为表面上相等
复制代码
undefined 类型 Undefined 类型只有一个值,就是特殊值 undefined。当使用 var 或 let 声明了变量但没有初始 化时,就相当于给变量赋予了 undefined 值:
let message; console.log(message == undefined); // true
复制代码
Boolean 类型 Boolean(布尔值)类型是 ECMAScript 中使用最频繁的类型之一,有两个字面值:true 和 false。 这两个布尔值不同于数值,因此true不等于1,false不等于0。下面是给变量赋值布尔值的例子
let found = true
let lost = true
复制代码
注意,布尔值字面量 true 和 false 是区分大小写的,因此 True 和 False(及其他大小混写形式) 是有效的标识符,但不是布尔值。
Number类型 ECMAScript 中最有意思的数据类型或许就是 Number 了。Number 类型使用 IEEE 754 格式表示整 数和浮点值(在某些语言中也叫双精度值)。不同的数值类型相应地也有不同的数值字面量格式最基本的数值字面量格式是十进制整数,直接写出来即可:
let intNum = 55;
复制代码
String 类型
String(字符串)数据类型表示零或多个 16 位 Unicode 字符序列。字符串可以使用双引号(")、 单引号(')或反引号(`)标示,因此下面的代码都是合法的:
let firstName = "John";
let lastName = "jacob";
let lastName = `ingleheimerschmidt`
复制代码
模板字面量 ECMAScript 6 新增了使用模板字面量定义字符串的能力。与使用单引号或双引号不同,模板字面量 保留换行字符,可以跨行定义字符串:
let myMultiLineString = 'first line\nsecond line';
let myMultiLineTempLateLiteral = `first line second line`
复制代码
Symbol 类型
symbol(符号)是 ECMAScript 6 新增的数据类型。符号是原始值,且符号实例是唯一、不可变的。 符号的用途是确保对象属性使用唯一标识符,不会发生属性冲突的危险。 尽管听起来跟私有属性有点类似,但符号并不是为了提供私有属性的行为才增加的(尤其是因为 Object API 提供了方法,可以更方便地发现符号属性)。 相反,符号就是用来创建唯一记号,进而用作非 字符串形式的对象属性。
符号的基本用法
符号需要使用 Symbol()函数初始化。因为符号本身是原始类型,所以 typeof 操作符对符号返回 symbol。
let sym = Symbol();
复制代码
调用 Symbol()函数时,也可以传入一个字符串参数作为对符号的描述(description),将来可以通 过这个字符串来调试代码。但是,这个字符串参数与符号定义或标识完全无关:
let genericSymbol = Symbol();
let otherGenericSymbol = Symbol();
let fooSymbol = Symbol('foo');
let otherFooSymbol = Symbol('foo'); console.log(genericSymbol == otherGenericSy