likes
comments
collection
share

JavaScript基础知识之数据类型

作者站长头像
站长
· 阅读数 23

变量

合法的变量命名规则:

  • 大小写字母、数字、 $_ 的组合
  • 不能用数字开头。
  • 不能是关键字/保留字

javascript基础知识(在javascript中 = 是赋值符号)

var a;       // 声明变量
var s = 2;   // 声明变量并赋值

JavaScript 中有 11 种数据类型

  • null: 空值
  • undefined:未定义
  • string:字符串
  • number: 数字
  • boolean:布尔
  • symbol:符号
  • bigNInt:大数
  • map:map
  • weakMap:weakMap
  • set:集合
  • weakSet:weakSet

其中 symbolbigNumbermapweakMapsetweakSet 是es6及其以后新增的数据类型

Number

JavaScript 只有一种数字类型。数字可以带小数点,也可以不带

123; // 整数123 0.456; // 浮点数0.456 1.2345e3; // 科学计数法表示1.2345x1000,等同于1234.5 -99; // 负数 NaN; // NaN表示Not a Number,当无法计算结果时用NaN表示 Infinity; // Infinity表示无限大,当数值超过了Number所能表示的最大值时,就表示为Infinity Boolean 布尔(逻辑)只能有两个值:true 或 false

var x=true
var y=false

String

字符串是存储字符(比如 "Bill Gates")的变量。

字符串可以是引号中的任意文本。您可以使用单引号或双引号:

var answer="Nice to meet you!";
var answer="He is called 'Bill'";
var answer='He is called "Bill"';

null 和 undefined

null 表示一个“空”的值,它和 0 以及空字符串 '' 不同, 0 是一个数值, '' 表示长度为 0 的字符串,而 null 表示“空”。

在其他语言中,也有类似 JavaScript 的 null 的表示,例如 Java 也用 null,Swift 用 nil,Python 用 None 表示。但是,在JavaScript中,还有一个和 null 类似的 undefined,它表示“未定义”。

JavaScript 的设计者希望用 null 表示一个空的值,而 undefined 表示值未定义。事实证明,区分两者的意义不大。大多数情况下,我们都应该用 nullundefined 仅仅在判断函数参数是否传递的情况下有用。

Array

数组是一组按顺序排列的集合,集合的每个值称为元素。JavaScript的数组可以包括任意数据类型

例如:

[1, 2, 3.14, 'Hello', null, true];

上述数组包含 6 个元素。数组用 [] 表示,元素之间用 , 分隔。

另一种创建数组的方法是通过 Array() 函数实现:

new Array(1, 2, 3); // 创建了数组[1, 2, 3]

然而,出于代码的可读性考虑,强烈建议直接使用 []

数组的元素可以通过索引来访问。请注意,索引的起始值为 0

var arr = [1, 2, 3.14, 'Hello', null, true];
arr[0]; // 返回索引为0的元素,即1
arr[5]; // 返回索引为5的元素,即true
arr[6]; // 索引超出了范围,返回undefined

Object

JavaScript的对象是一组由键-值组成的无序集合,例如:

var person = {
    name: 'Bob',
    age: 20,
    tags: ['js', 'web', 'mobile'],
    city: 'Beijing',
    hasCar: true,
    zipcode: null
};

JavaScript 对象的 键(key) 都是字符串类型,值可以是任意数据类型。上述 person 对象一共定义了 6 个键值对,其中每个键又称为对象的属性,例如: personname 属性为 'Bob'zipcode 属性为 null

要获取一个对象的属性,我们用 对象变量.属性名 或者 对象变量[属性名] 的方式:

person.name;      // 'Bob'
person["name"];   // 'Bob'

map

JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。

为了解决这个问题,ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,MapObject 更合适。

const map = new Map();
const obj = {p: 'Hello World'};

map.set(obj, 'content')
map.get(obj) // "content"

map.has(obj) // true
map.delete(obj) // true
map.has(obj) // false

weakMap

weakMap结构与Map结构类似,也是用于生成键值对的集合。

weakMapMap 的区别有三点。

  • weakMap只接受对象(null 除外)和 Symbol 值作为键名,不接受其他类型的值作为键名。
    const map = new WeakMap();
    map.set(1, 2) // 报错
    map.set(null, 2) // 报错
    map.set(Symbol(), 2) // 不报错
    
  • weakMap的键名所指向的对象,不计入垃圾回收机制。
  • weakMap 没有遍历方法,也没有 size 属性。

set

它类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成 Set 数据结构。

const s = new Set();

[1, 3, 5, 4, 5, 2, 2, NaN, NaN].forEach(x => s.add(x));

for (let i of s) {
  console.log(i); // 1 3 5 4 2 NaN
}
// 最终的 set的值: 1 3 5 4 2 NaN
// NaN 只有一个则表明在 Set 内部,两个`NaN`是相等的。

weakSet

WeakSet 结构与 Set 类似,也是不重复的值的集合。

但是,它与 Set 有两个区别。

  • WeakSet 的成员只能是对象和 Symbol 值,而不能是其他类型的值。
const wset = new WeakSet();
wset.add("a") // 报错
wset.add(Symbol()) // 不报错
  • weakSet 中的对象都是弱引用,即垃圾回收机制不考虑 weakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。