none
命令行 cscript 不能遍历出 对象中已设置的 toString 键 RRS feed

  • 问题

  • function $trace($var){
    	if('console' in this)
    		console.log($var); // Browser
    	else if('WScript' in this)
    		WScript.Echo($var); // Windows
    };
    
    $trace('----- ----- 1 ----- -----');
    var o = {};
    var b = new Boolean(o.hasOwnProperty('toString'));
    $trace('toString in o : '+b.toString());
    $trace('----- ----- 2 ----- -----');
    o['toString'] = function(){return '1234'};
    $trace('set o["toString"]');
    $trace('----- ----- 3 ----- -----');
    b = new Boolean(o.hasOwnProperty('toString'));
    $trace('toString in o : ' + b.toString());
    $trace('----- ----- 4 ----- -----');
    var bFound = false;
    for(var key in o)
    {
    	if(key === 'toString')
    		bFound = true;
    	$trace('for ... in loop : ' + key);
    }
    if(bFound == false)
    	$trace('why no "toString" ?');
    $trace('----- ----- 5 ----- -----');
    $trace('o toString : ' + o);

    浏览器中执行(例如 IE 10)

    ----- ----- 1 ----- -----
    toString in o : false
    ----- ----- 2 ----- -----
    set o["toString"]
    ----- ----- 3 ----- -----
    toString in o : true
    ----- ----- 4 ----- -----
    for ... in loop : toString
    ----- ----- 5 ----- -----
    o toString : 1234

    Window 下命令行 cscript 执行

    ----- ----- 1 ----- -----
    toString in o : false
    ----- ----- 2 ----- -----
    set o["toString"]
    ----- ----- 3 ----- -----
    toString in o : true
    ----- ----- 4 ----- -----
    why no "toString" ?
    ----- ----- 5 ----- -----
    o toString : 1234

    这个是什么问题?cscript 缺陷么?



    2014年3月13日 2:28

全部回复