JavaScript学习之基础语法(二)
数据类型
在 JavaScript 中定义变量的时候使用的是 let/var,例如:
let num = 18 let str = '18'
这两种方式定义的变量有什么区别呢?这里定义的两个变量 num 和 str 的数据类型不同。例如:描述年龄和工资通过数字来描述,注册某个网站的时候使用的账号和昵称可以是英文字母的组合。不同的数据是由不同的类型来描述的。
下面我们就开始学习 JavaScript 中的数据类型。
JavaScript 中的数据类型可以分为两大类:基本数据类型、复杂数据类型。
- 简单数据类型
- Number
- String
- Boolean
- null
- undefined
- BigInt - 新增
- Symbol - 新增
- 复杂数据类型
- Object
简单数据类型
简单数据类型又叫基本数据类型、原始数据类型(MDN)。这里我们先来学习简单数据类型中的前5种。
Number 类型
在 JavaScript 中整数(5, 6, 10)和浮点数(11.5, 1.1)都属于 Number 类型,也就是所有的数值类型都是 Number 类型。
- 数值字面量
- 数值的固定值表示法
- 通俗点说就是用字面的形式来代表这种类型的数据
- 110、1024、60.5
- 数值判断
- NaN:not a number,JavaScript 中一个特殊的值,即非数字
- isNaN:is not a number,JavaScript 中的一个方法用来判断一个值是否不是数字
- 示例
// 返回 NaN,不是一个数字 let n = 5 * 'a'; // 返回 false,即不管带不带引号都是一个数字 isNaN('5'); isNaN(5); // 返回 true,不是一个数字 isNaN('a');
注意: 在控制台中打印的数值类型的值是有颜色的。
String 类型
- 把多个字符组成一串,就是一个字符串。
- 字符串字面量:字面形式来代表字符串数据
'程序猿',"程序媛"
- 定义字符串的时候用单引号和双引号都可以
let userName = 'laohong'; let nickName = "老洪";
在定义字符串的时候我们推荐使用单引号,这是因为 HTML 中属性值使用双引号包裹,有的时候 HTML 和 JavaScript 可能会嵌套书写,为了区分 HTML 的属性和 JavaScript 中的字符串,所以这里始终推荐字符串使用单引号。
- 转义符
你尝试打印 '老洪',注意打印的结果中要包含单引号。实现不了吧?这是因为引号在 JavaScript 中有特殊的含义,如果我们想要打印引号的话,可以取消引号在 JavaScript 中的特殊含义
let userName = ''老洪''; console.log(userName);
\ 在这里的作用是取消后面修饰符号的特殊含义,类似的内容,见下表:
![]()
Boolean 类型
布尔类型是一种专门为了编程设置的一种语法,主要用来表示一个结果的成立与否,其值只有两个 true (真) 和 false (假)。
- Boolean 字面量: true 和 false,区分大小写
- 计算机内部存储:true 为1,false 为0
undefined 类型
undefined 类型只有一个值:undefined。代表变量定义了,但是没有赋值。
var a; // 输出 undefined console.log(a); // or let b; // 输出 undefined console.log(b);
null 类型
null 类型只有一个值:null。代表变量赋值了,但是值代表的是空。
var a = null; let b = null; // 变量a和b都赋值了,值为 null
Symbol(符号)类型
Symbol(符号)类型是 ECMAScript 6 新增的原始数据类型,它具有唯一性和不变性,比如用作对象属性可以保证不会覆盖现有属性。
-
基本用法
Symbol 没有字面量语法,只能使用 Symbol() 函数来初始化一个 Symbol 值
const sym = Symbol() console.log(typeof sym) // symbol console.log(sym) // Symbol()
const fooSym = Symbol('foo') console.log(fooSym) // Symbol(foo)
const bar1Sym = Symbol('bar'), bar2Sym = Symbol('bar') console.log(bar1Sym === bar2Sym) // false,证明不会覆盖现有任何属性
// 作为对象属性 const obj = {} obj[bar1Sym] = 'test1' obj[bar2Sym] = 'test2' console.log(obj) // {Symbol(bar): "test1", Symbol(bar): "test2"}
-
全局符号注册表
如果需要在多个地方共享和重用的某个符号实例,可以用一个字符串作为键,在全局符号注册表中通过 Symbol.for(strParam) 创建一个符号来使用。
Symbol.for() 对每个字符串执行幂等操作。使用某个字符串调用 Symbol.for 时,会在全局注册表中检查是否已经存在对应的符号,如果不存在则创建一个新的符号实例并添加到全局注册表中,如果存在则返回已有符号的实例。这点和通过 Symbol 创建的符号不一样。
Symbol.for 的参数必须是字符串,如果传递了非字符串类型,默认会调用 toString 方法转成字符串。
使用 Symbol.keyFor() 方法来查询全局注册表中指定符号的字符串键,如果查询的不是全局符号,则返回 undefined。
const fooGlobalSym = Symbol.for('foo') const otherFooGlobalSym = Symbol.for('foo') console.log(fooGlobalSym === otherFooGlobalSym) // true,证明重用已有符号
const fooSym = Symbol('foo') console.log(fooSym === fooGlobalSym) // false,即使采用相同的字符串,Symbol 和 Symbol.for 创建的符号也不相等 console.log(Symbol.keyFor(fooGlobalSym)) // foo console.log(Symbol.keyFor(fooSym)) // undefined
-
使用符号作为属性
凡是可以使用字符串或数值作为属性的地方,都可以使用符号。使用符号作为对象属性是最好通过变量保存符号,否则在后面使用 obj[key] 索引时会很困难。
- Object.getOwnPropertyNames() ,返回对象实例所有的常规属性数组
- Object.getOwnPropertySymbols(),返回对象实例的所有符号属性数组
- Object.getOwnPropertyDescriptors(),返回同时包含常规和符号属性的属性描述符对象
- Reflect.ownKeys(),返回两种类型的键
const obj = { t1: 't1' } const t2Sym = Symbol('t2') obj[t2Sym] = 't2Sym' console.log(obj) // {t1: "t1", Symbol(t2): "t2Sym"} console.log(Object.getOwnPropertyNames(obj)) // ['t1'] console.log(Object.getOwnPropertySymbols(obj)) // [Symbol(t2)] console.log(Object.getOwnPropertyDescriptors(obj)) // 同时包含常规和符号的属性描述符对象 console.log(Reflect.ownKeys(obj)) // ['t1', Symbol(t2)]
复杂数据类型
复杂数据类型:Object。因为比较复杂所以后面专门学习。
获取变量的类型
在 JavaScript 中定义变量的时候是通过 var/let 定义的变量,也就是在定义变量的时候没有确定数据的类型。
let a = 10; a = 'abc';
甚至在代码执行的过程中可以对变量重新赋值不同的类型(这样是不推荐的,我们希望同一个变量中的数据是同一数据类型的)。
我们如果想要知道某个变量中存储的数据类型,可以通过关键字 typeof 来获取。
用法:
typeof 字面量/变量 typeof (字面量/变量)
注意: typeof 是关键字。
let a = 10; console.log(typeof a); // number console.log(typeof 'Hello'); // string console.log(typeof true); // boolean console.log(typeof undefined); // undefined console.log(typeof null); // object
注意: typeof 返回的结果是字符串类型。
快速查看数据类型
如何使用谷歌浏览器,快速地查看数据类型?
在控制台通过 console.log() 打印数据,字符串的颜色是黑色的,数值类型是蓝色的,布尔类型也是紫色的,undefined 和 null 是灰色的(如果看到黑色的说明是字符串)
注释
其实学习任何一门语言之前,最应该先学习的语法就是注释语法,这样我们就可以在代码中写一些说明和笔记之类的 JavaScript 里面的注释有两种:单行注释、多行注释。
单行注释
- 用来描述下面一个或多行代码的作用
- VSCode 中的快捷键:Ctrl + /
// 这是一个变量 let nickName = 'js';
多行注释
- 用来注释多条代码
- VSCode 中的快捷键:Shift+ Alt + A
/* var age = 18; var name = 'zs'; console.log(name, age); */

浙公网安备 33010602011771号