博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一些JavaScript 1.6~1.8上的高级技巧~
阅读量:2242 次
发布时间:2019-05-09

本文共 3325 字,大约阅读时间需要 11 分钟。

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

原文引用在:

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

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
 

转载地址:http://tlhbb.baihongyu.com/

你可能感兴趣的文章
C结构体、C++结构体、C++类的区别
查看>>
进程和线程的概念、区别和联系
查看>>
CMake 入门实战
查看>>
绑定CPU逻辑核心的利器——taskset
查看>>
Linux下perf性能测试火焰图只显示函数地址不显示函数名的问题
查看>>
c结构体、c++结构体和c++类的区别以及错误纠正
查看>>
Linux下查看根目录各文件内存占用情况
查看>>
A星算法详解(个人认为最详细,最通俗易懂的一个版本)
查看>>
利用栈实现DFS
查看>>
(PAT 1019) General Palindromic Number (进制转换)
查看>>
(PAT 1073) Scientific Notation (字符串模拟题)
查看>>
(PAT 1080) Graduate Admission (排序)
查看>>
Play on Words UVA - 10129 (欧拉路径)
查看>>
mininet+floodlight搭建sdn环境并创建简答topo
查看>>
【linux】nohup和&的作用
查看>>
Set、WeakSet、Map以及WeakMap结构基本知识点
查看>>
【NLP学习笔记】(一)Gensim基本使用方法
查看>>
【NLP学习笔记】(二)gensim使用之Topics and Transformations
查看>>
【深度学习】LSTM的架构及公式
查看>>
【python】re模块常用方法
查看>>