您的位置:首页 > Web前端 > JavaScript

[转]一些JavaScript 1.6~1.8上的高级技巧~

2007-09-05 16:12 495 查看
在jslibs的项目wiki上看到这些技巧,都是一些在mozilla spidermonkey javascript上的高级戏法。在JScript上不能用的哈~。这里转过来,很多技巧挺有趣的。

原文引用在:

http://code.google.com/p/jslibs/wiki/JavascriptTips

------------------------------------------

1. destructuring assignments

[align=left]JavaScript 1.7[/align]

var{a:x}={a:7};

Print(x);// prints: 7

[align=left]2. Generator Expressions[/align]
[align=left]JavaScript 1.7[/align]

[align=left][ y for( y in[5,6,7,8,9])]// is [0,1,2,3,4][/align]

[align=left]and[/align]

[align=left][ y for each ( y in[5,6,7,8,9])]// is [5,6,7,8,9][/align]

[align=left]Because in for extracts index names, and for each extracts the values. [/align]
[align=left]3. Advanced use of iterators[/align]
[align=left]JavaScript 1.8[/align]

Number.prototype.__iterator__ =function(){

for( let i =0; i <this; i++)

yield i;

};

for( let i in5)

print(i);

[align=left]prints: [/align]

1

2

3

4

5

[align=left]This make Number object to act as a generator. [/align]
[align=left]4. Expression Closures[/align]
[align=left]JavaScript 1.8[/align]

[align=left]function(x) x * x;[/align]

[align=left]Note that braces {...} and return are implicit [/align]
[align=left]5. Basic debugging[/align]
[align=left]JavaScript 1.6[/align]

LoadModule('jsstd');

functionThrowAnError(){

(function(){

thrownewError("Whoops!");

})();

}

try{

ThrowAnError()

}catch(e){

Print(e.stack);

}

[align=left]prints: [/align]

Error("Whoops!")@:0

()@test.js:7

ThrowAnError()@test.js:5

@test.js:14

[align=left]6. Multiple-value returns[/align]
[align=left]JavaScript 1.7[/align]

function f(){

return[1,2];

}

var[a, b]= f();

Print( a +' '+ b );// prints: 1 2

[align=left]7. Operator [ ] and strings ( like charAt() )[/align]
[align=left]JavaScript 1.6[/align]

var str ='foobar';

Print( str[4]);

[align=left]prints: [/align]

[align=left]a[/align]

[align=left]8. indexOf() and lastIndexOf() Works on Array[/align]
[align=left]JavaScript 1.6[/align]

var obj ={};

var arr =['foo',567, obj,12.34];

Print( arr.indexOf(obj));// prints: 2

[align=left]9. Using Array functions on a non-Array object[/align]
[align=left]JavaScript 1.7[/align]

var obj ={};

Array.push(obj,'foo');

Array.push(obj,123);

Array.push(obj,5.55);

Print( obj.toSource());// prints: ({0:"foo", length:3, 1:123, 2:5.55})

[align=left]10. Simulate threads using yield operator[/align]
[align=left]JavaScript 1.7[/align]

var scheduler =newfunction(){

var _workers =[];

this.Add=function( worker ){

_workers.push(new worker());

}

this.Run=function(){

while( _workers.length )

for each (var worker in _workers )

try{

worker.next();

}catch(err if err instanceofStopIteration){

_workers.splice( _workers.indexOf(worker),1);

}

}

}

function worker1(){

for(var i =0; i <5; i++){

Print('worker1: '+i,'\n');

yield;

}

}

scheduler.Add(worker1);

function worker2(){

for(var i =0; i <10; i++){

Print('worker2: '+i,'\n');

yield;

}

}

scheduler.Add(worker2);

scheduler.Run();

[align=left]prints: [/align]

worker1:0

worker2:0

worker1:1

worker2:1

worker1:2

worker2:2

worker1:3

worker2:3

worker1:4

worker2:4

worker2:5

worker2:6

worker2:7

worker2:8

worker2:9

[align=left]11. swap two variables[/align]
[align=left]JavaScript 1.7[/align]

var a =1;

var b =2;

[a,b]=[b,a];

[align=left]12. Destructuring assignment with function arguments[/align]
[align=left]JavaScript 1.7[/align]

function foo([a,b]){

Print(a);

Print(b);

}

foo([12,34]);

[align=left]Prints: [/align]

12

34

[align=left]13. JavaScript scope and LET instruction[/align]
[align=left]JavaScript 1.7[/align]

var x =5;

var y =0;

let (x = x+10, y =12){

Print(x+y);

}

Print(x+y);

[align=left]prints: [/align]

27

5

[align=left]or, [/align]

for( let i=0; i <10; i++){

Print(i +' ');

}

Print(i);

[align=left]prints: [/align]

[align=left]0123456789 test.js:4:ReferenceError: i isnotdefined[/align]

[align=left]14. Iterate on values[/align]
[align=left]JavaScript 1.6[/align]

for each (var i in[3,23,4])

Print(i)

[align=left]Prints: [/align]

3

23

4
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: