首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js中typeof的用法

typeof 是 JavaScript 中的一个一元操作符,用于检测变量的数据类型。它返回一个表示变量类型的字符串。typeof 可以应用于任何 JavaScript 变量或表达式。

基础概念

typeof 操作符的基本语法如下:

代码语言:txt
复制
typeof variable

或者

代码语言:txt
复制
typeof (expression)

返回值

typeof 返回以下几种类型的字符串:

  • "undefined" —— 如果变量未定义。
  • "boolean" —— 如果变量是布尔值。
  • "number" —— 如果变量是数字。
  • "string" —— 如果变量是字符串。
  • "bigint" —— 如果变量是 BigInt 类型。
  • "symbol" —— 如果变量是 Symbol 类型。
  • "object" —— 如果变量是对象或 null(这是一个历史遗留问题,null 被错误地认为是对象)。
  • "function" —— 如果变量是函数(在 JavaScript 中,函数也是对象的一种)。

示例代码

代码语言:txt
复制
console.log(typeof undefined); // "undefined"
console.log(typeof true);      // "boolean"
console.log(typeof 123);       // "number"
console.log(typeof "hello");   // "string"
console.log(typeof 123n);      // "bigint"
console.log(typeof Symbol());  // "symbol"
console.log(typeof null);      // "object"(注意这是一个历史遗留问题)
console.log(typeof {});        // "object"
console.log(typeof []);        // "object"
console.log(typeof function(){}); // "function"

应用场景

typeof 在需要检查变量类型时非常有用,尤其是在编写通用函数或处理用户输入时。例如,你可能想要确保一个函数只接受特定类型的参数:

代码语言:txt
复制
function addNumbers(a, b) {
    if (typeof a !== 'number' || typeof b !== 'number') {
        throw new TypeError('Both arguments must be numbers');
    }
    return a + b;
}

注意事项

  • typeof null 返回 "object",这是一个已知的问题,因为 null 实际上是一个原始值,而不是对象。
  • typeof 对于区分数组和普通对象是无能为力的,因为它们都返回 "object"。如果需要区分数组,可以使用 Array.isArray() 方法。

解决 typeof null 的问题

由于 typeof null 返回 "object",如果你需要准确地检查 null,你应该使用严格相等运算符:

代码语言:txt
复制
if (value === null) {
    // value 是 null
}

这样就可以避免将 null 错误地识别为对象。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • js typeof和instanceof 区别

    typeof一般是用来判断简单数据类型的,对一个值使用 typeof 操作符会返回下列字符串之一: “undefined”: 表示值未定义 “boolean”: 表示值为布尔值 “number”:...null 被认为是一个对空对象的引用 const variable3 = true; console.log(typeof variable3); // "boolean" const variable4..." typeof (new String("1")); // "object" 从上面的例子可以看到,typeof的弊端就是会把复杂数据类型都解释为"object",所以对复杂数据类型的判断就不能用...typeof。...instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性,主要是用来判断复杂数据类型,返回布尔值,表示是否是某种类型(用于判断一个变量是否属于某个对象的实例

    1.6K20

    js中reduce的用法

    }, init); arr 表示原数组; prev 表示上一次调用回调时的返回值,或者提供的初始值 init; cur 表示当前正在处理的数组元素; index 表示当前正在处理的数组元素的索引,若提供...0,cur的值为数组第一项3,相加之后返回值为3作为下一轮回调的prev值,然后再继续与下一个数组项相加,以此类推,直至完成所有数组项的和并返回。...: ① 初始化一个空数组 ② 将需要去重处理的数组中的第1项在初始化数组中查找,如果找不到(空数组中肯定找不到),就将该项添加到初始化数组中 ③ 将需要去重处理的数组中的第2项在初始化数组中查找,...如果找不到,就将该项继续添加到初始化数组中 ④ …… ⑤ 将需要去重处理的数组中的第n项在初始化数组中查找,如果找不到,就将该项继续添加到初始化数组中 ⑥ 将这个初始化数组返回 4....其它reduceRight()方法 该方法用法与reduce()其实是相同的,只是遍历的顺序相反,它是从数组的最后一项开始,向前遍历到第一项。 5.

    5.7K40

    js中settimeout()的用法详解_js中setattribute

    大家好,又见面了,我是你们的朋友全栈君。 setTimeout与setTimeInterval均为window的函数,使用中顶层window一般都会省去,这两个函数经常稍不留神就使用错了。...setTimeout内的函数先不执行,隔一段时间后再执行,函数后面的数字是隔的时间,单位是毫秒(千分之一秒) 比如: setTimeout(‘alert(“hello world!”)’..., 400); setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式,直到clearInterval()被调用或窗口被关闭。 比如: Stop interval setInterval动作的作用是在播放动画的时...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    15K20

    js中find的用法_js中find函数

    今天我们要说的是结合ES6新特性谈一下js里面的一个很好用的方法-find() 现在的前端和过去的不一样,过去的前端只要会画页面就行了,但是现在仅仅会画页面已经远远不够了,现在前端还需要会处理数据,而且还要会将数据分析分类处理...,这样后端的压力比较大,我们举个例子: /** * aim csdn博客 - find()用法 * author clearlove * date 18-08-06 * */ var...下面我们讲怎么用前端处理这块的逻辑 首先我们拿到了所有的数据这里我直接放到一个测试用的js里面存放, 要实现之前说的效果,就需要使用我们今天的主角find()方法。 find()是用来做什么的呢?...find()方法返回数组中符合测试函数条件的第一个元素。否则返回undefined 在本文章需要注意的几个点: ①、第一个元素 ②、测试函数 那么如何使用呢?...-- aim csdn博客 - find()用法 author clearlove date 18-08-06 --> <!

    11.7K30

    JS中call apply bind的用法

    谁调用当前的属性或者方法的,它就是谁 /* 2.1.bind方法作用 修改函数或者方法中的this为指定的对象, 并且会返回一个修改之后的新函数给我们 注意点...: bind方法除了可以修改this以外, 还可以传递参数, 只不过参数必须写在this对象的后面 */ //call apply bind修改this的.../*call:修改函数或者方法中的this为指定的对象, 并且会立即调用修改之后的函数 注意点: call方法除了可以修改this以外, 还可以传递参数, */.../*apply:修改函数或者方法中的this为指定的对象, 并且会立即调用修改之后的函数 注意点: apply方法除了可以修改this以外, 还可以传递参数, 只不过参数必须通过数组的方式传递...立即执行是不返回的. */ let obj={name:"cyg"}; /* function test(a,b) {

    3K30

    js中class的继承的基础用法

    在es6中class可通过关键词extends来实现继承,es5则是修改原型链来实现继承的。...有一个注意点:就是子类在constructor方法中调用super,super就是父类的构造函数,我们必须先构造父类,才能使用子类。...,注意看子类中fn1这个函数,他使用了父类的sky属性,注意在子类使用父类的属性时,只能使用this来调用,使用super是找不到的,因为class中的属性都是实例属性。...但是如果是函数,使用this或者super都是可以调用的到,比如在constructor方法中调用了父类的rotate方法,这里使用this.rotate()或者super.rotate()都是可以的,...es5中的继承 es5中的继承则是让某个构造函数的原型对象等于另一个类型的实例,这样实现的继承。

    4.3K10

    js确定数据类型typeof与instanceof

    js高级程序设计 1....确定数据的类型 typeof 因为ECMAScript 的类型系系统是松散的,所以需要一种手段来确定任意变量的数据类型.typeOf 这个操作符 就是为此而生的. typeof 最适合用来判断一个变量是否为原始类型...更确切地说,他是判断一个变量是否为"字符串","数值","布尔值","未定义的"的最好方式 typeof 虽然对原始值有作用,但他对引用值的用处不大,  let a = "你好啊";  // string...两者的区别 typeof 和 instanceof 都是用来判断数据类型的方法,但它们有以下区别: typeof 会返回一个变量的基本类型,例如 ‘number’, ‘string’, ‘boolean...typeof 是根据数据在存储单元中的类型标签来判断数据的类型,instanceof 则是根据函数的 prototype 属性值是否存在于对象的原型链上来判断数据的类型。

    7510

    -JS中级测试 单选 typeof null的结果是什么?

    考核内容:javascript数据类型及运算操作 题发散度: ★★ 试题难度: ★ 解题思路: null 在 JavaScript 中 null 表示 "什么都没有"。...null是一个只有一个值的特殊类型。表示一个空对象引用。 用 typeof 检测 null 返回是object。...undefined 在 JavaScript 中, undefined 是一个没有设置值的变量。 typeof 一个没有值的变量会返回 undefined。...undefined 和 null 的区别 null 和 undefined 的值相等,但类型不等: 1、定义 (1)undefined:是所有没有赋值变量的默认值,自动赋值。...(2)null:主动释放一个变量引用的对象,表示一个变量不再指向任何对象地址。 2、何时使用null当使用完一个比较大的对象时,需要对其进行释放内存时,设置为 null。

    2.1K20
    领券