变量
使用 let 和 const 关键字来声明变量,区别是 const 用来声明常量,常量不能被修改
不要使用 var,不要使用 var,不要使用 var
let message = 'hello';
// 通常使用大写字母加下划线的方式声明常量
const BIRTHDAY = '31.03.1998'
const COLOR_ORANGE = '#FF7F00';
数据类型
Number 类型
包括整数和浮点数、特殊数值:Infinity 和 NaN
-
Infinity
代表无穷大:
console.log(1 / 0); // 可以通过除 0 得到 console.log(Infinity); // 或者直接使用 -
NaN
任何对 NaN 的进一步数学运算都会返回 NaN
console.log(NaN + 1); // NaN console.log(3 * NaN); // NaN // 有一个例外 console.log( NaN ** 0 ); // 1
在 js 中做任何数学运算都是安全的,最坏就是得到一个 NaN 而已
BigInt 类型
js 中 number 类型无法安全地表示大于 (即 9007199254740991)或小于 的整数,会出现精度问题:
// 这两个数字(正好超出了安全整数范围)是相同的
console.log(9007199254740991 + 1); // 9007199254740992
console.log(9007199254740991 + 2); // 9007199254740992
大多数情况 number 类型就够了,但是有些情况需要范围非常大的整数:比如用于密码学或微秒精度的时间戳,这时候就要使用 BigInt 了
BigInt 用于表示任意长度的整数
// 尾部的 "n" 表示这是一个 BigInt 类型
const bigInt = 1234567890123456789012345678901234567890n;
String 类型
有三种包含字符串的方式:
- 双引号:"Hello"
- 单引号:'Hello'
- 反引号:`Hello`
反引号是功能扩展引号(扩展运算符),可以将变量和表达式包装在 ${...} 中:
let name = "zs";
// 嵌入一个变量
console.log(`Hello, ${name}`); // Hello, zs
// 嵌入一个表达式
console.log(`the result is ${1 + 1}`); // the result is 2
Boolean 类型
ture 和 false
null 值
js 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值
不同于其他编程语言,js 中的 null 不是一个“对不存在的 object 的引用”或者 “null 指针”
undefined 值
和 null 一样自成类型,代表”未被赋值“
如果一个变量已被声明,但未被赋值,那么它就是 undefined:
let a;
console.log(a); // undefined
// 可以显式地将 undefined 赋值给变量,但是不建议这么做...
// 通常使用 null 赋值给变量,undefined 保留作为未进行初始化变量的默认初始值
a = undefined;
Object 类型
object 类型又被称为复杂数据类型,其他所有数据类型都被成为”原始类型“,因为它们的值只包含一个单独的内容(字符串、数字或者其他)
Symbol 类型
symbol 类型用于创建对象的唯一标识符
typeof 运算符
typeof 运算符返回参数的类型
对 typeof x 的调用会以字符串的形式返回数据类型:
typeof undefined // "undefined"
typeof 0 // "number"
typeof 10n // "bigint"
typeof true // "boolean"
typeof "foo" // "string"
typeof Symbol("id") // "symbol"
// Math 是 js 中的内置 object
typeof Math // "object"
// 这是一个历史遗留问题,typeof 的行为在这里是错误的,null 绝对不是一个 object,它有自己的类型
typeof null // "object"
// alert 是一个函数,在 js 中没有 function 类型,函数隶属于 object,从技术上讲 typeof 在这里也是不对的,但在实际编程中却很方便
typeof alert // "function"
也可以使用另一种语法 typeof(x),但要记住 typeof 是一个操作符,不是一个函数,这里的括号不是 typeof 的一部分,它是数学运算分组的括号