如果它总是返回object
作为类型,那么它有什么用处?
总是用于元素或列表。
如果它总是返回object
作为类型,那么它有什么用处?
总是用于元素或列表。
JS的typeof并不总是返回'object',但对于一些人不认为是对象的东西,比如数组和空值,在这种情况下也会返回object。
对于数组来说,这是正确的,因为JS认为数组就是对象;它们是同样的东西。数组只是另一个类,你可以使用Array类型实例化对象,但它们仍然被视为对象。
此页面列出了JS中的类型及每种类型的typeof响应。该页面还提供了一些JS代码,用于覆盖typeof函数,并返回更有用的信息。如果你担心它不太有用,你可以自己实现类似的内容。
它并不总是返回"object":
alert(typeof "hello");
话虽如此,一种(可能)更有用的检查对象的技巧是使用Object.prototype.toString.call()
并查看结果:
var t = Object.prototype.toString.call(itIsAMystery);
[object Foo]
,其中"Foo"是有趣的部分,对于"native"类型(如Date或String),你会得到它们的构造函数名称。[[Class]]
内部属性的值,它代表了原生对象的规范定义的分类(并不是真正的类型!),对于宿主对象来说,它基本上可以是任何东西... - Christian C. Salvadótypeof
运算符对于函数的this
作用域始终返回“object”
(除非该作用域恰好是一个函数)。请参阅"Why does typeof this return “object”?"。 - Phrogz并非所有的typeof返回对象。
对象,数组和正则表达式返回object
类型。
函数是一个对象(引用类型),但返回function
类型。这是语言中的一种不一致性。
另外需要注意的是,undefined返回undefined
,而null返回object
,这是JS中的一个错误。
NaN(不是数字)返回number
类型。
最好你要记住所有这些,并了解这些奇怪的行为。
以下是所有值的类型供参考:
typeof "Tamal" ---> string
typeof 100 ---> number
typeof true ---> boolean
typeof false ---> boolean
typeof undefined ---> undefined
typeof function() {} ---> function
typeof Symbol() ---> symbol
typeof {name: "Tamal"} ---> object
typeof [1, 2, 3] ---> object
typeof /^/ ---> object
typeof NaN ---> number
typeof null ---> object (bug)
Symbol
数据类型。 - RBT根据我的经验,typeof 的主要问题在于区分数组、对象和 null(它们都返回 "object")。
为了解决这个问题,我首先检查 typeof,然后检查 null 情况或者 "object" 的构造函数,像这样:
for (o in obj) {
if (obj.hasOwnProperty(o)) {
switch (typeof obj[o]) {
case "object":
if (obj[o] === null) {
//do somethign with null
} else {
if (obj[o].constructor.name === "Array") {
//do something with an Array
} else {
//do something with an Object
}
}
break;
case "function":
//do something with a function
break;
default:
//do something with strings, booleans, numbers
break;
}
}
}
var dateObject = Object.prototype.toString(new Date);
document.write(dateObject);//[object Object]
var dateObject = Object.prototype.toString.call(new Date);
document.write(dateObject);//[object Date]
使用typeof操作符时需要小心。对于null,返回"object",对于NaN,返回"number",对于Infinity,返回"number",对于"new Number(1)"和数组,返回"object"。
当检查变量的存在性(typeof variable !== "undefined")时,有时需要首先检查(variable == null),因为typeof对于分配给null的变量返回"object"。
显而易见的是,在检查typeof时不要调用函数,因为函数的返回类型将被报告,而不是"function"。
typeof
是一个操作符,接受一个操作数,返回一个字符串,指示操作数是原始值、函数、对象还是未声明。
需要注意的是,typeof
不会返回与用于构造对象的类或构造函数名称相对应的字符串,因此你的问题。
typeof
对于 七种 原始 JavaScript 类型返回以下内容:
'undefined'
'object'
'boolean'
'number'
'bigint'
'symbol'
'string'
'bigdecimal'
。)
typeof
对对象/对象类别返回以下内容:
document.all
: 'undefined'
'function'
'object'
typeof
对未声明的标识符返回'undefined'
。typeof
返回 'object'
用于 null
,尽管 null
是 Null 类型, 这是因为早期需要与 Java 轻松互操作的要求,而在 Java 中,null
是空的引用类型。 null
位于每个原型链的顶部,并且可以被视为在对象类型原语集合中。
typeof
对于函数返回 'function'
,而不是 'object'
,以便轻松识别函数(即可调用对象)而无需在语言内部公开单独的 isFunction
或 isCallable
函数。
typeof
是 JavaScript 中仅有的一种机制,可以检测未声明的标识符(参见规范中第2步a),而不会抛出错误。这在尝试动态检测主机环境(例如 Node.js 或 Web 浏览器)时非常有用,因为被测试的标识符可能存在也可能不存在。
如果在暂时性死区内使用 typeof
来检测标识符,则会抛出运行时错误(即正常行为)。
document.all
是 Web 平台中的一个对象(即不是语言的一部分),typeof
返回 undefined
。为了保持与早期 Web 浏览器的兼容性,语言规范对此进行了特殊处理。
像 new Number(1)
和 new Boolean(true)
这样的原始包装对象被视为对象,而不是原始类型。因此,例如,typeof new Number(1)
返回 'object'
。请注意,typeof Number(1)
返回 'number'
,因为在没有 new
操作符的情况下,这些构造函数返回一个原始类型的实例。
new
- Jowen