Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 确定对象包装基元是否由用户创建_Javascript_Primitive - Fatal编程技术网

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

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 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');
    }
}