typeof 原来也不复杂

本文详细介绍了JavaScript中各种数据类型(如字符串、数字、函数等)的使用方法及特性,并深入探讨了运算符的应用场景,包括算术运算、比较运算、逻辑运算等。
console.log(undefined);//undefined


var str="abcdefg";
console.log(typeof (str));//string
console.log(typeof "abcdefg");//string
var num1=1111;
console.log(typeof num1); //number


var str1=num1+'a';
console.log(typeof str1);//string


var str2=new String();
console.log(typeof str2);//object


var arr=[1,2];
console.log(typeof arr);//object
var obj=new Object();
console.log(typeof obj);//object
function fun1(){};
console.log(typeof fun1);//function
var fun2=function (){};
console.log(typeof fun2);//function



同时注意类似的 instead of
该运算符希望左值是一个对象,右值是一个函数。
先检测左值的类型,检测左值是否是右边类的实例,对则返回true.反之亦然,
不同的是,该运算符的右值必须是函数,如果不是函数的话则会抛出异常。
03-08
### typeof 操作符概述 JavaScript 中的 `typeof` 是一种一元操作符,用于确定其操作数的数据类型。该操作数可以是任何类型的值,包括但限于变量、字面量和其他表达式[^1]。 #### 基础数据类型识别 对于基本数据类型,`typeof` 能够提供直观的结果: - 对于字符串(String),无论是否使用引号包裹,`typeof 'abc'` 或者 `typeof('abc')` 都会返回 `"string"`[^5]。 - 数字(Number)类型,比如整数或浮点数,像 `typeof 123` 将得到 `"number"`。 - 布尔值(Boolean),例如 `true` 或 `false`,对应的 `typeof true` 结果为 `"boolean"`。 - 符号(Symbol),这是 ES6 新增的一种原始数据类型,`typeof Symbol()` 返回 `"symbol"`。 ```javascript console.log(typeof "hello"); // string console.log(typeof 42); // number console.log(typeof true); // boolean console.log(typeof Symbol()); // symbol ``` #### 特殊情况处理 然而,在某些情况下,`typeof` 的行为可能符合直觉: - 当遇到未定义的变量时,如从未声明过的 `myVar`,执行 `typeof myVar` 会安全地返回 `"undefined"`,而会抛出错误[^4]。 - 关键的是,尽管 `null` 表示空指针对象,但 `typeof null` 却意外地返回 `"object"`,这被认为是一个历史遗留问题[^3]。 - 同样值得注意的是,虽然 NaN(Not-a-Number)代表是一个有效的数值,可是 `typeof NaN` 居然也返回 `"number"`。 ```javascript let undeclared; console.log(typeof undeclared); // undefined console.log(typeof null); // object console.log(typeof NaN); // number ``` #### 复杂结构体判断 当涉及到复杂的数据结构时,`typeof` 可能显得力从心: - 如前所述,数组实际上被认为是对象的一个子集,所以无论是通过方括号 `[ ]` 创建还是调用构造器 `new Array()` 构建出来的数组实例,`typeof [1, 2, 3]` 和 `typeof new Array(1, 2, 3)` 都只会给出 `"object"` 的反馈[^2]。 - 类似地,日期对象同样属于广义上的对象范畴,因此 `typeof new Date()` 也会报告为 `"object"`。 ```javascript const arr = [1, 2, 3]; console.log(typeof arr); // object console.log(typeof new Date()); // object ``` 为了更加精确地区分这些复杂的实体,建议采用其他手段来辅助判断,比如利用 `Array.isArray()` 方法专门验证某个值是是数组,或是借助 `Object.prototype.toString.call(value)` 来获取更为详细的内部标签信息。 ```javascript console.log(Array.isArray([1, 2, 3])); // true console.log(Object.prototype.toString.call(new Date())); // "[object Date]" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值