Using . or [ ] to access Object properties - what's the difference?

前端 未结 1 2013
再見小時候
再見小時候 2021-01-18 12:25

What is the difference between the code (i) and (ii) written below ?

(i)

var obj:Object = new Object();
obj.attribute = value ;

(ii

1条回答
  •  情歌与酒
    2021-01-18 12:45

    The difference is in the lookup mechanism: If you use the dot syntax, the compiler will know at compile time that you are accessing a property of that object. If you use the bracket syntax, the actual lookup of the property is done at runtime, and there will have to be more type checking - after all, you could compose the key string dynamically, the value could change, or you could even be calling a function instead of a variable, etc.

    The result is a significant difference in performance: Bracket syntax takes about three times as long to execute as dot syntax.

    Here's a little speed test to illustrate my point:

    var start : int = getTimer();
    
    var obj:Object = { something : "something" };
    
    for (var i : int = 0; i < 100000000; i++) {
        var n:String = obj.something;
    }
    
    trace ("Time with dot syntax: "+(getTimer() - start));
    
    start = getTimer();
    
    for (i = 0; i < 100000000; i++) {
        var o:String = obj["something"];
    }
    
    trace ("Time with bracket syntax: "+(getTimer() - start));
    

    If the two were the same, except for notation, they should take exactly the same amount of time. But as you can see, this is not the case. On my machine:

    Time with dot syntax:      3937
    Time with bracket syntax:  9857
    

    0 讨论(0)
提交回复
热议问题