一些JavaScript 1.6~1.8上的高级技巧
2007-09-04 18:42
423 查看
一些JavaScript 1.6~1.8上的高级技巧~
在jslibs的项目wiki上看到这些技巧,都是一些在mozilla spidermonkey javascript上的高级戏法。在JScript上不能用的哈~。这里转过来,很多技巧挺有趣的。
原文引用在:
http://code.google.com/p/jslibs/wiki/JavascriptTips
------------------------------------------
1. destructuring assignments
[align=left]JavaScript 1.7[/align]
[align=left]var{a:x}={a:7};
Print(x);// prints: 7[/align]
[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]
[align=left]Number.prototype.__iterator__ =function(){
for( let i =0; i <this; i++)
yield i;
};
for( let i in5)
print(i);[/align]
[align=left]prints: [/align]
[align=left]1
2
3
4
5[/align]
[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]
[align=left]LoadModule('jsstd');
functionThrowAnError(){
(function(){
thrownewError("Whoops!");
})();
}
try{
ThrowAnError()
}catch(e){
Print(e.stack);
}[/align]
[align=left]prints: [/align]
[align=left]Error("Whoops!")@:0
()@test.js:7
ThrowAnError()@test.js:5
@test.js:14[/align]
[align=left]6. Multiple-value returns[/align]
[align=left]JavaScript 1.7[/align]
[align=left]function f(){
return[1,2];
}
var[a, b]= f();
Print( a +' '+ b );// prints: 1 2[/align]
[align=left]7. Operator [ ] and strings ( like charAt() )[/align]
[align=left]JavaScript 1.6[/align]
[align=left]var str ='foobar';
Print( str[4]);[/align]
[align=left]prints: [/align]
[align=left]a[/align]
[align=left]8. indexOf() and lastIndexOf() Works on Array[/align]
[align=left]JavaScript 1.6[/align]
[align=left]var obj ={};
var arr =['foo',567, obj,12.34];
Print( arr.indexOf(obj));// prints: 2[/align]
[align=left]9. Using Array functions on a non-Array object[/align]
[align=left]JavaScript 1.7[/align]
[align=left]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]
[align=left]10. Simulate threads using yield operator[/align]
[align=left]JavaScript 1.7[/align]
[align=left]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]
[align=left]prints: [/align]
[align=left]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]
[align=left]11. swap two variables[/align]
[align=left]JavaScript 1.7[/align]
[align=left]var a =1;
var b =2;
[a,b]=[b,a];[/align]
[align=left]12. Destructuring assignment with function arguments[/align]
[align=left]JavaScript 1.7[/align]
[align=left]function foo([a,b]){
Print(a);
Print(b);
}
foo([12,34]);[/align]
[align=left]Prints: [/align]
[align=left]12
34[/align]
[align=left]13. JavaScript scope and LET instruction[/align]
[align=left]JavaScript 1.7[/align]
[align=left]var x =5;
var y =0;
let (x = x+10, y =12){
Print(x+y);
}
Print(x+y);[/align]
[align=left]prints: [/align]
[align=left]27
5[/align]
[align=left]or, [/align]
[align=left]for( let i=0; i <10; i++){
Print(i +' ');
}
Print(i);[/align]
[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]
[align=left]for each (var i in[3,23,4])
Print(i)[/align]
[align=left]Prints: [/align]
[align=left]3
23
4[/align]
在jslibs的项目wiki上看到这些技巧,都是一些在mozilla spidermonkey javascript上的高级戏法。在JScript上不能用的哈~。这里转过来,很多技巧挺有趣的。
原文引用在:
http://code.google.com/p/jslibs/wiki/JavascriptTips
------------------------------------------
1. destructuring assignments
[align=left]JavaScript 1.7[/align]
[align=left]var{a:x}={a:7};
Print(x);// prints: 7[/align]
[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]
[align=left]Number.prototype.__iterator__ =function(){
for( let i =0; i <this; i++)
yield i;
};
for( let i in5)
print(i);[/align]
[align=left]prints: [/align]
[align=left]1
2
3
4
5[/align]
[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]
[align=left]LoadModule('jsstd');
functionThrowAnError(){
(function(){
thrownewError("Whoops!");
})();
}
try{
ThrowAnError()
}catch(e){
Print(e.stack);
}[/align]
[align=left]prints: [/align]
[align=left]Error("Whoops!")@:0
()@test.js:7
ThrowAnError()@test.js:5
@test.js:14[/align]
[align=left]6. Multiple-value returns[/align]
[align=left]JavaScript 1.7[/align]
[align=left]function f(){
return[1,2];
}
var[a, b]= f();
Print( a +' '+ b );// prints: 1 2[/align]
[align=left]7. Operator [ ] and strings ( like charAt() )[/align]
[align=left]JavaScript 1.6[/align]
[align=left]var str ='foobar';
Print( str[4]);[/align]
[align=left]prints: [/align]
[align=left]a[/align]
[align=left]8. indexOf() and lastIndexOf() Works on Array[/align]
[align=left]JavaScript 1.6[/align]
[align=left]var obj ={};
var arr =['foo',567, obj,12.34];
Print( arr.indexOf(obj));// prints: 2[/align]
[align=left]9. Using Array functions on a non-Array object[/align]
[align=left]JavaScript 1.7[/align]
[align=left]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]
[align=left]10. Simulate threads using yield operator[/align]
[align=left]JavaScript 1.7[/align]
[align=left]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]
[align=left]prints: [/align]
[align=left]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]
[align=left]11. swap two variables[/align]
[align=left]JavaScript 1.7[/align]
[align=left]var a =1;
var b =2;
[a,b]=[b,a];[/align]
[align=left]12. Destructuring assignment with function arguments[/align]
[align=left]JavaScript 1.7[/align]
[align=left]function foo([a,b]){
Print(a);
Print(b);
}
foo([12,34]);[/align]
[align=left]Prints: [/align]
[align=left]12
34[/align]
[align=left]13. JavaScript scope and LET instruction[/align]
[align=left]JavaScript 1.7[/align]
[align=left]var x =5;
var y =0;
let (x = x+10, y =12){
Print(x+y);
}
Print(x+y);[/align]
[align=left]prints: [/align]
[align=left]27
5[/align]
[align=left]or, [/align]
[align=left]for( let i=0; i <10; i++){
Print(i +' ');
}
Print(i);[/align]
[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]
[align=left]for each (var i in[3,23,4])
Print(i)[/align]
[align=left]Prints: [/align]
[align=left]3
23
4[/align]
相关文章推荐
- 一些JavaScript 1.6~1.8上的高级技巧~
- [转]一些JavaScript 1.6~1.8上的高级技巧~
- 一些JavaScript 1.6~1.8上的高级技巧~
- 一些JavaScript 1.6~1.8上的高级技巧~
- 一些JavaScript 1.6~1.8上的高级技巧~
- Javascript高级程序设计第22章(高级技巧)
- 转:向高级Javascript程序员阵营迈进:Javascript一些概念研究总结
- python 的一些高级编程技巧
- JavaScript高级技巧
- javascript一些实用技巧小结
- JavaScript+技巧与高级特性
- 极客学院之javascript高级技巧
- JavaScript高级程序设计学习笔记--高级技巧
- javascript IE与FireFox 一些兼容写法 (小技巧七)
- vim一些高级替换技巧
- JavaScript实用的一些技巧
- Javascript中的高级特性与常用技巧应用(部分)
- JavaScript实用的一些技巧
- JavaScript 技巧与高级特性
- JavaScript高级程序设计 学习笔记 js高级技巧