2016-07-27 12 views
3

Chrome 52 Object.keysからは、プロキシ内で呼び出された場合でも列挙できないフィールドが表示されます。 Chrome 51は問題ありませんでした。また、EdgeとFirefoxは大丈夫です。Chrome 52 Object.keysのオブジェクト内にバグがありますか?

これは愚かなテストです。ただ、間違った行動を示すために、クロム52上でそれを実行します。

var target={}; 
 
Object.defineProperty(target,"__observerCallbacks__",{enumerable:false,configurable:true,writable:false,value:['aaaa']}); 
 
var ori=''; 
 
Object.keys(target).forEach(
 
    function(x){ 
 
    ori+=x; 
 
    } 
 
); 
 
var proxy=''; 
 
var p = new Proxy(target, {get:function(target,property) 
 
    { 
 
     return property; 
 
    } 
 
}); 
 
Object.keys(p).forEach(
 
    function(x){ 
 
    //if (window.target.propertyIsEnumerable(x)){ 
 
     proxy+=x; 
 
    //} 
 
    } 
 
); 
 
//alert('ori '+ori+' proxy '+proxy); 
 
console.log('ori', ori, 'proxy', proxy)

は、誰もがこの問題に遭遇していますか?助言がありますか?猿のパッチ?

+0

ファイルゴーグルのバグ? –

+0

ああ、うわー、それはバグです。 –

+0

https://bugs.chromium.org/p/chromium/issues/detail?id=632287&can=2&start=0&num=100&q=&colspec=ID%20Pri%20M%20Stars%20ReleaseBlock%20Component%20Status%20Owner% 20Summary%20OS%20Modified&groupby =&sort = – user1299153

答えて

0

私は少しバグテストをクリーンアップしました。私はChrome 51とChrome 52でこれを実行しましたが、その動作はまったく異なります。クロム51では、tKeyspKeysに等しく、は​​に等しいが、クロム52ではtKeystNamesに等しく、問題があると思われる。

__observerCallbacks__を別のプロパティ名に変更しても問題が解決されないため、プロパティの名前は関係ありません。このバグレポートをGoogleに提出することをお勧めします。

プロパティデスクリプタは、プロパティ名が__observerCallbacks__の場合、何らかの理由でvalue["aaaa"]から"_"に変更します。なぜそれがそれをやっているのか分かりませんが、そのプロパティ名に固有のものなので、それは関係がないと思います。

var target = {}; 
 

 
Object.defineProperty(target, "__observerCallbacks__", { 
 
    enumerable: false, 
 
    configurable: true, 
 
    writable: false, 
 
    value: ['aaaa'] 
 
}); 
 

 
var tKeys = Object.keys(target); 
 
var tNames = Object.getOwnPropertyNames(target); 
 
var tProps = tNames.map(Object.getOwnPropertyDescriptor.bind(target)); 
 
var tValue = target.__observerCallbacks__; 
 

 
var proxy = new Proxy(target, { 
 
    get: function(target, property) { 
 
    return property; 
 
    } 
 
}); 
 

 
var pKeys = Object.keys(proxy); 
 
var pNames = Object.getOwnPropertyNames(proxy); 
 
var pProps = pNames.map(Object.getOwnPropertyDescriptor.bind(proxy)); 
 
var pValue = proxy.__observerCallbacks__; 
 

 
console.log('target keys:', tKeys); 
 
console.log('target own names:', tNames); 
 
console.log('target property descriptors:', tProps); 
 
console.log('target value:', tValue); 
 

 
console.log('proxy keys:', pKeys); 
 
console.log('proxy own names:', pNames); 
 
console.log('proxy property descriptors', pProps); 
 
console.log('proxy value:', pValue);

+0

バグはhttps://bugs.chromium.org/p/chromium/issues/detail?id=632287&can=2&start=0&num=100&q=&colspec=ID%20Pri%20M%20Stars%で公開されました20ReleaseBlock%20Component%20Status%20Owner%20Summary%20OS%20Modified&groupby =&sort = – user1299153

関連する問題