基本数据类型
对于基本类型在创建时无需使用
new
关键字
Bigint在实际开发不常用,如果对于精度要求高可以使用第三方库,如decimal.js
基本数据类型介绍
undefined
:当变量被声明但未赋值,或者函数没有返回值时,就会呈现 undefined 状态。null
:null 代表一个空值,它是一个人为设定的空对象指针。number
:该类型用于表示整数和浮点数。JavaScript 里没有专门区分整数和浮点数的类型。string
:字符串是由零个或多个字符组成的序列,可使用单引号、双引号或者反引号来表示。symbol
:这是 ES6 引入的新类型,symbol 是独一无二且不可变的数据类型,常被用作对象属性的键。BigInt
:BigInt 是 ES2020 引入的一种新的基本数据类型,用于表示任意大的整数。在 JavaScript 中,Number 类型只能安全地表示 -(2^53 - 1) 到 2^53 - 1 之间的整数,超出这个范围的整数运算会出现精度丢失问题,而 BigInt 就可以解决这个问题。
基本数据类型判别方法
typeof
console.log(typeof undefined); // 输出: 'undefined'
console.log(typeof null); // 输出: 'object',这是 JavaScript 的一个历史遗留问题
console.log(typeof true); // 输出: 'boolean'
console.log(typeof 123); // 输出: 'number'
console.log(typeof 'hello'); // 输出: 'string'
console.log(typeof Symbol('key')); // 输出: 'symbol'
console.log(typeof 123n); // 输出: 'bigint'
instanceof
instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。可以用来判断值是否为 Boolean、Number、String 的包装对象。
// 示例代码
let boolObj = new Boolean(true);
let numObj = new Number(123);
let strObj = new String('hello');console.log(boolObj instanceof Boolean); // 输出: true
console.log(numObj instanceof Number); // 输出: true
console.log(strObj instanceof String); // 输出: true
最重要: Object.prototype.toString.call()
- Object.prototype.toString 方法
在 JavaScript 中,每个对象都继承自 Object.prototype,Object.prototype 里有一个 toString 方法。该方法的原始用途是返回一个能反映对象类型的字符串。
对于 Object 类型的对象,toString 方法会返回一个形如 [object Type] 的字符串,其中 Type 代表对象的具体类型。比如,Object 类型的对象返回 [object Object]。 - 不同对象对 toString 方法的重写
很多内置对象(像 Array、Date、Function 等)都对 toString 方法进行了重写,以满足自身的需求。
Array 对象的 toString 方法会把数组元素转换为字符串并用逗号连接起来。
Date 对象的 toString 方法会返回一个表示日期和时间的字符串。const arr = [1, 2, 3]; console.log(arr.toString()); // 输出: 1,2,3
const date = new Date(); console.log(date.toString()); // 输出类似: Tue Apr 09 2024 14:30:00 GMT+0800 (中国标准时间)
- 使用 call 方法改变 this 指向
由于很多对象重写了 toString 方法,所以若要调用 Object.prototype 上原始的 toString 方法,就需要借助 call 方法来改变 this 指向。
call 方法能让我们在调用函数时指定函数内部的 this 值。当使用 Object.prototype.toString.call(obj) 时,就把 Object.prototype.toString 方法里的 this 指向了 obj,这样就能调用原始的 toString 方法,从而得到对象类型的详细信息。
// 判断 undefined
console.log(Object.prototype.toString.call(undefined)); // 输出: [object Undefined]// 判断 null
console.log(Object.prototype.toString.call(null)); // 输出: [object Null]// 判断布尔类型
console.log(Object.prototype.toString.call(true)); // 输出: [object Boolean]// 判断数字类型
console.log(Object.prototype.toString.call(123)); // 输出: [object Number]// 判断字符串类型
console.log(Object.prototype.toString.call('hello')); // 输出: [object String]// 判断 Symbol 类型
console.log(Object.prototype.toString.call(Symbol('key'))); // 输出: [object Symbol]// 判断 BigInt 类型
console.log(Object.prototype.toString.call(123n)); // 输出: [object BigInt]// 判断数组类型
const arr = [1, 2, 3];
console.log(Object.prototype.toString.call(arr)); // 输出: [object Array]// 判断日期类型
const date = new Date();
console.log(Object.prototype.toString.call(date)); // 输出: [object Date]
引用数据类型
引用数据类型介绍
Object
:Object 是 JavaScript 中最基础的引用数据类型,可用于存储键值对,是其他对象的基础,许多复杂的数据结构都基于它构建。
const person = {name: 'John',age: 30
};
Array
:Array 用于存储有序的数据集合,元素可以是不同的数据类型,并且可以动态调整长度。
const numbers = [1, 2, 3, 4, 5];
Function
:Function 用于封装可重复使用的代码块,可接受参数并返回值,还可以作为参数传递给其他函数,或者作为返回值返回。
function add(a, b) {return a + b;
}
Date
:Date 用于处理日期和时间,提供了一系列方法来获取和设置日期、时间的各个部分。
const now = new Date();
RegExp
:RegExp 用于处理正则表达式,可用于字符串的匹配、替换、分割等操作。
const pattern = /abc/;
引用数据类型判别方法
最重要: Object.prototype.toString.call()
console.log(Object.prototype.toString.call({})); // 输出: '[object Object]'
console.log(Object.prototype.toString.call([])); // 输出: '[object Array]'
console.log(Object.prototype.toString.call(function() {})); // 输出: '[object Function]'
console.log(Object.prototype.toString.call(new Date())); // 输出: '[object Date]'
console.log(Object.prototype.toString.call(/abc/)); // 输出: '[object RegExp]'