gpt4 book ai didi

JavaScript:可以使用 "Object.prototype.toString.call(obj)"进行数据类型检测吗?

转载 作者:行者123 更新时间:2023-11-29 14:41:03 25 4
gpt4 key购买 nike

如果调用 Object 的 toString 方法和调用(用于更改上下文),则返回一个字符串。此字符串包含要调用的值的数据类型。

var obj = {};
var field = [];
var str = 'abc';
var num = 3;
var reg = /.*/;
var bool = true;
var notANumber = NaN;
var undef = undefined;

console.log(Object.prototype.toString.call(obj)); // [object Object]
console.log(Object.prototype.toString.call(field)); // [object Array]
console.log(Object.prototype.toString.call(str)); // [object String]
console.log(Object.prototype.toString.call(num)); // [object Number]
console.log(Object.prototype.toString.call(reg)); // [object RegExp]
console.log(Object.prototype.toString.call(bool)); // [object Boolean]
console.log(Object.prototype.toString.call(notANumber)); // [object Number]
console.log(Object.prototype.toString.call(undefined)); // [object Undefined]

从我的修补中我可以说:除了通常的 JavaScript 怪异(NaN 是数字)之外,它似乎工作正常。

现在我问自己:

如果我用一些 .split(/\s/) 等创建一个函数,将数据类型作为字符串返回,那么我可以将其用于类型检测。

但是是什么让我不信任:

我从未见过程序员以这种方式使用 Object.prototype.toString.call-construct。他们使用 typeof 或寻找某些方法 ...

所以我的问题是:

如上所述的功能是否会按预期工作?

或者它会因为浏览器中不同的 JavaScript 实现而失败吗?还是因为其他原因失败了?

最佳答案

根据specifications at MDN , Object.prototype.toString 在所有浏览器上都得到完全支持,因此它应该可以一致地工作。

我想指出的是,仅检测 arrayobject 之间的差异才能将结果与简单地使用 typeof 区分开来:

编辑 1

reg 变量也被检测为一个对象

var obj = {};
var field = [];
var str = 'abc';
var num = 3;
var reg = /.*/;
var bool = true;
var notANumber = NaN;
var undef = undefined;

console.log(typeof obj); // object
console.log(typeof field); // object
console.log(typeof str); // string
console.log(typeof num); // number
console.log(typeof reg); // object
console.log(typeof bool); // boolean
console.log(typeof notANumber); // number
console.log(typeof undefined); // undefined
//Data from original post:
console.log(Object.prototype.toString.call(obj)); // [object Object]
console.log(Object.prototype.toString.call(field)); // [object Array]
console.log(Object.prototype.toString.call(str)); // [object String]
console.log(Object.prototype.toString.call(num)); // [object Number]
console.log(Object.prototype.toString.call(reg)); // [object RegExp]
console.log(Object.prototype.toString.call(bool)); // [object Boolean]
console.log(Object.prototype.toString.call(notANumber)); // [object Number]
console.log(Object.prototype.toString.call(undefined)); // [object Undefined]

关于JavaScript:可以使用 "Object.prototype.toString.call(obj)"进行数据类型检测吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38222325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com