Js获取数据类型

Js获取数据类型

JavaScript有着七种基本类型StringNumberBooleanNullUndefinedSymbolObject,前六种为基本数据类型,Object为引用类型。

typeof#

typeof(operand)typeof operandoperand是一个表示对象或原始值的表达式,其类型将被返回。

规则#

  • String: "string"
  • Number: "number"
  • Boolean: "boolean"
  • Null: "object"
  • Undefined: "undefined"
  • Symbol: "symbol"
  • BigInt: "bigint"
  • Function Object: "function"
  • Object: "Object"

示例#

Copy
console.log(typeof(a)); // undefined // 未定义的变量 console.log(typeof("s")); // string console.log(typeof(1)); // number console.log(typeof(true)); // boolean console.log(typeof(new String("s"))); // object console.log(typeof(new Number(1))); // object console.log(typeof(new Boolean(true))); // object console.log(typeof(null)); // object // 在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。由于 null 代表的是空指针(大多数平台下值为 0x00),因此,null 的类型标签是 0,typeof null 也因此返回 "object"。 console.log(typeof(undefined)); // undefined console.log(typeof(Symbol())); // symbol console.log(typeof(Object(Symbol()))); // object console.log(typeof(1n)); // bigint // ES10(ES2019)新增基本数据类型 console.log(typeof(Object(BigInt(1n)))); // object console.log(typeof(function() {})); // function console.log(typeof([])); // object console.log(typeof(new Date())); // object console.log(typeof(/regex/)); // object console.log(typeof({})); // object

instanceof#

instanceof运算符用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上。在Js中,一切都是对象,至少被视为一个对象,能够直接使用字面量声明的基本数据类型,虽然并不是直接的对象类型,但是在基本数据类型的变量调用方法的时候,会出现一个临时的包装对象,从而能够调用其构造函数的原型的方法,所以使用instanceof时对于字面量声明的StringNumberBooleanSymbolBigInt都会返回false

示例#

Copy
console.log("s" instanceof String); // false console.log(1 instanceof Number); // false console.log(true instanceof Boolean); // false console.log(new String("s") instanceof String); // true console.log(new Number(1) instanceof Number); // true console.log(new Boolean(true) instanceof Boolean); // true console.log(null instanceof Object); // false console.log(undefined instanceof Object); // false console.log(Symbol() instanceof Symbol); // false console.log(Object(Symbol()) instanceof Symbol); // true console.log(1n instanceof BigInt); // false console.log(Object(1n) instanceof BigInt); // true console.log(Symbol() instanceof Symbol); // false console.log((function() {}) instanceof Function); // true console.log([] instanceof Array); // true console.log(new Date() instanceof Date); // true console.log(/regex/ instanceof RegExp); // true console.log({} instanceof Object); // true

Object.prototype.toString#

借助Object原型的toString方法判断类型,一般对于新建的不同类型的对象toString方法都会被重新定义,无法沿着原型链到达Object.prototype.toString,可以通过call或者apply来调用Object.prototype.toString用以判断类型。

示例#

Copy
console.log(Object.prototype.toString.call("s")); // [object String] console.log(Object.prototype.toString.call(1)); // [object Number] console.log(Object.prototype.toString.call(true)); // [object Boolean] console.log(Object.prototype.toString.call(new String("s"))); // [object String] console.log(Object.prototype.toString.call(new Number(1))); // [object Number] console.log(Object.prototype.toString.call(new Boolean(true))); // [object Boolean] console.log(Object.prototype.toString.call(null)); // [object Null] console.log(Object.prototype.toString.call(undefined)); // [object Undefined] console.log(Object.prototype.toString.call(Symbol())); // [object Symbol] console.log(Object.prototype.toString.call(Object(Symbol()))); // [object Symbol] console.log(Object.prototype.toString.call(1n)); // [object BigInt] console.log(Object.prototype.toString.call(Object(BigInt(1n)))); // [object BigInt] console.log(Object.prototype.toString.call(function() {})); // [object Function] console.log(Object.prototype.toString.call([])); // [object Array] console.log(Object.prototype.toString.call(new Date())); // [object Date] console.log(Object.prototype.toString.call(/regex/)); // [object RegExp] console.log(Object.prototype.toString.call({})); // [object Object]

每日一题#

Copy
https://github.com/WindrunnerMax/EveryDay

参考#

Copy
https://www.cnblogs.com/sban/p/10256412.html https://www.cnblogs.com/yucheng6/p/9747313.html https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Data_structures
posted @   WindRunnerMax  阅读(930)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示
CONTENTS