我正在摆弄 JavaScript,并注意到this
永远不可能是原始的。我在说什么?让我解释。
以这个函数为例。
function test(){
return typeof this;
}
test.call('Abc'); // 'object'
test.call(123); // 'object'
他们都'object'
, not 'string'
or 'number'
,正如我所料。
经过一番混乱(并搞乱instanceof
),我明白发生了什么事。'Abc'
正在转换为String
对象,以及123
正在转换为Number
object.
无论如何,我的问题是为什么会发生这种情况,以及如何将对象转换回其原始对象?
我知道我可以使用(String)this
or (Number)this
,但是如果我不知道类型怎么办?
EDIT: 我试图这样做:
function element(){
var $e = $(this),
$d = $e.closest('div');
}
element.call('#myID');
但它不起作用。this
is a String
对象,而 jQuery 只是创建了对象的集合,而不是使用选择器来搜索 DOM。
正如其他人指出的那样,它根据规范被强制为一个对象。
需要注意的重要一点是,如果您在严格模式,强制不会发生。
"use strict";
function test(){
return typeof this;
}
test.call('Abc'); // 'string'
test.call(123); // 'number'
所以真正的问题是你为什么不使用严格的? ;-)
正如您在评论中指出的,您应该能够使用.valueOf()
如果您支持不支持严格模式的实现。
如果您只期望一个字符串,或者如果您也期望一个数字,但您不介意数字字符串,那么您可以这样做......
(this + '') // "Abc"
(this + '') // "123"
“但是如果我不知道类型我该怎么做”
如果你想知道它的类型,请使用泛型toString
可用于Object.prototype
以获得内部[[班级]]财产。
Object.prototype.toString.call( this ); "[object String]"
Object.prototype.toString.call( this ); "[object Number]"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)