Javascript 确定对象包装基元是否由用户创建
Javascript由于明显的原因,在将原语分配给此对象时,会将其包装在临时对象中。有什么方法可以确定通过它引用的对象是用户创建的、永久的还是系统创建的、暂时的?您可以尝试以下方法:Javascript 确定对象包装基元是否由用户创建,javascript,primitive,Javascript,Primitive,Javascript由于明显的原因,在将原语分配给此对象时,会将其包装在临时对象中。有什么方法可以确定通过它引用的对象是用户创建的、永久的还是系统创建的、暂时的?您可以尝试以下方法: var obj = {x:5, y:new Number(5)}; function value(value) { //using == would result in false positives for value.call(obj.y, new Number(5)); return thi
var obj = {x:5, y:new Number(5)};
function value(value) {
//using == would result in false positives for value.call(obj.y, new Number(5));
return this === value;
}
console.log(value.call(obj.x, obj.x)); //False
console.log(value.call(obj.y, obj.y)); //True
你确定它是JavaScript而不是Java吗?@Max,也许装箱在JavaScript中不是正确的术语-我指的是围绕基元类型的对象包装器。为什么不平等对待它们呢?也许这对JavaScript有帮助types@Max,这不是关于类型的问题:我不确定这是否适用。Javascript允许原语作为调用和应用的上下文传递。发生这种情况时,它将永远不会是全局的或未定义的,它将是传入的原语的包装版本。@danShumway抱歉,我误解了你的话。我认为没有办法确定这一点。
function fun() {
// in browser, the 'global' is window, and global in node.
// but in strict mode, if you don't specify 'this', it will be 'undefined'.
if (this === global || this === undefined) {
console.log('system created');
} else {
console.log('user created');
}
}