1. **typeof 运算符**
`typeof` 是最常用的检测变量数据类型的运算符。它返回一个表示该变量类型的字符串:
javascript
let num = 42;
console.log(typeof num); // 输出 "number"
var str = 'Hello World';
console.log(typeof str); // 输出 "string"
const boolVar = true;
console.log(typeof boolVar); // 输出 "boolean"
let obj = {};
console.log(typeof obj); // 输出 "object" (对于普通对象或函数都会输出 object)
function test() {}
console.log(typeof test); // 输出 "function"
let arr = [];
console.log(Array.isArray(arr)); // 对于数组需要使用 Array.isArray 方法来判断,因为 typeof 返回的是 "object"
let nullVal = null;
console.log(null === undefined ? 'undefined' : typeof nullVal); // 需要注意的是,typeof null 的结果也是 "object", 所以通常不直接用 typeof 判断是否为 null
let undefineValue;
console.log(undefineValue == null ? 'undefined': typeof undefineValue); // 正确地得到 “undefined”
2. **instanceof 操作符**
当我们需要区分不同的引用类型如Array或者Date时,可以借助`instanceof`操作符进行精确的判别:
javascript
let dateObj = new Date();
console.log(dateObj instanceof Date); // 如果是日期对象则返回true
let arrayInstance = [1, 2, 3];
console.log(arrayInstance instanceof Array); // 若为数组,则返回true
3. **Object.prototype.toString.call()方法**
在一些复杂场景下,例如检查某个值是不是正统的对象或者是特定内置对象实例,`toString()`配合call/apply可实现更精准的判定:
javascript
let regExp = /test/;
console.log(Object.prototype.toString.call(regExp)) // "[object RegExp]"
let myNull = Object.create(null);
console.log(Object.prototype.toString.call(myNull)); // 即使myNull没有原型链也能准确得知"[object Object]”。
通过以上几种手段,在实际开发过程中我们可以灵活运用这些技术对JS中的各类信息数据类型做出有效且详尽的辨别与处理。