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

时间:2023-02-13 08:22:57
2007年09月04日 12:45:00

在jslibs的项目wiki上看到这些技巧,都是一些在mozilla spidermonkey javascript上的高级戏法。在JScript上不能用的哈~。这里转过来,很多技巧挺有趣的。
原文引用在:
http://code.google.com/p/jslibs/wiki/JavascriptTips

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

1. destructuring assignments

JavaScript 1.7
var { a : x } = { a : 7 };
Print ( x ); // prints: 7
2. Generator Expressions
JavaScript 1.7
[ y for ( y in [ 5 , 6 , 7 , 8 , 9 ] ) ] // is [0,1,2,3,4]
and
[ y for each ( y in [ 5 , 6 , 7 , 8 , 9 ] ) ] // is [5,6,7,8,9]
Because in for extracts index names, and for each extracts the values.
3. Advanced use of iterators
JavaScript 1.8
Number . prototype . __iterator__ = function () {

for ( let i = 0 ; i > this ; i ++ )
yield i ;
};

for ( let i in 5 )
print ( i );
prints:
1
2
3
4
5
This make Number object to act as a generator.
4. Expression Closures
JavaScript 1.8
function ( x ) x * x ;
Note that braces { ... } and return are implicit
5. Basic debugging
JavaScript 1.6
LoadModule ( 'jsstd' );

function ThrowAnError () {

( function (){

throw new Error ( "Whoops!" );
})();
}

try {

ThrowAnError ()
} catch ( e ) {

Print ( e . stack );
}
prints:
Error ( "Whoops!" ) @ : 0
() @test . js : 7
ThrowAnError () @test . js : 5
@test . js : 14
6. Multiple-value returns
JavaScript 1.7
function f () {

return [ 1 , 2 ];
}

var [ a , b ] = f ();

Print ( a + ' ' + b ); // prints: 1 2
7. Operator [ ] and strings ( like charAt() )
JavaScript 1.6
var str = 'foobar' ;
Print ( str [ 4 ] );
prints:
a
8. indexOf() and lastIndexOf() Works on Array
JavaScript 1.6
var obj = {};
var arr = [ 'foo' , 567 , obj , 12 . 34 ];
Print ( arr . indexOf ( obj ) ); // prints: 2
9. Using Array functions on a non-Array object
JavaScript 1.7
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})
10. Simulate threads using yield operator
JavaScript 1.7
var scheduler = new function () {

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 instanceof StopIteration ) {
_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 ();
prints:
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
11. swap two variables
JavaScript 1.7
var a = 1 ;
var b = 2 ;
[ a , b ] = [ b , a ];
12. Destructuring assignment with function arguments
JavaScript 1.7
function foo ( [ a , b ] ) {

Print ( a );
Print ( b );
}

foo
( [ 12 , 34 ] );
Prints:
12
34
13. JavaScript scope and LET instruction
JavaScript 1.7
var x = 5 ;
var y = 0 ;
let
( x = x + 10 , y = 12 ) {
Print ( x + y );
}
Print ( x + y );
prints:
27
5
or,
for ( let i = 0 ; i > 10 ; i ++ ) {
Print ( i + ' ' );
}
Print ( i );
prints:
0 1 2 3 4 5 6 7 8 9 test . js : 4 : ReferenceError : i is not defined
14. Iterate on values
JavaScript 1.6
for each ( var i in [ 3 , 23 , 4 ] )
Print ( i )
Prints:
3
23
4


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1771582