Roc*_*mat 7 javascript primitive jquery object
我正在搞乱JavaScript,并注意到它this永远不会是原始的.我在说什么?让我解释.
以此功能为例.
function test(){
    return typeof this;
}
test.call('Abc'); // 'object'
test.call(123); // 'object'
他们既不是'object','string'也'number'不像我期望的那样.
经过一些混乱(并且搞乱了instanceof)之后,我想出了发生了什么.  'Abc'被转换为一个String对象,123并被转换为一个Number对象.
无论如何,我的问题是为什么会发生这种情况,以及如何将对象转换回原语?
我知道我可以使用(String)this或者(Number)this,但如果我不知道这种类型怎么办呢?
编辑:我试图这样做:
function element(){
    var $e = $(this),
    $d = $e.closest('div');
}
element.call('#myID');
它不起作用.  this是一个String对象,jQuery只是创建了一个对象集合,而不是使用选择器来搜索DOM.
小智 5
正如其他人所指出的那样,它根据规范被强制转换为对象.
需要注意的重要一点是,如果你处于严格模式,那么强制就不会发生.
"use strict";
function test(){
    return typeof this;
}
test.call('Abc'); // 'string'
test.call(123); // 'number'
所以真正的问题是你为什么不使用严格的?;-)
正如您在评论中指出的那样,.valueOf()如果您支持不支持严格模式的实现,则应该能够使用.
如果你只是期待一个String,或者你也期待一个数字,但你不介意数字字符串,你可以这样做......
(this + '') // "Abc"
(this + '') // "123"
"但如果我不知道这种类型怎么能这样做呢"
如果您想知道它的类型,请使用通用的toStringon Object.prototype来获取内部[[Class]]属性.
Object.prototype.toString.call( this ); "[object String]"
Object.prototype.toString.call( this ); "[object Number]"
| 归档时间: | 
 | 
| 查看次数: | 189 次 | 
| 最近记录: |