果然javascript程序员思维广啊

2013-05-30 16:07:08 +08:00
 zhujinliang
① 使用 || 从多个变量中取出第一个可用变量
比如 var wantFruit = apple || pear || ... || grape;

依据逻辑或判断规则,不过js特殊地返回原值而不是逻辑型

② 转为文本:var str = val + '';

依据隐式转换规则

③ 转为逻辑型: var bool = !!val;

④ 取重复文本: var str = Array(9).join('abc'); // 输出 'abc' x 8

原理:创建一个含9个元素的数组,然后用'abc'作为链接字符串把数据连接成文本,实际结果是
undefined + 'abc' + undefined + 'abc' + ... + undefined +'abc' + undefined ,去掉undefined就是我们看到的结果。。。

这都是谁想出来的用法。。。

同时欢迎补充~~~
6783 次点击
所在节点    JavaScript
36 条回复
deathfang
2013-05-30 16:12:54 +08:00
subpo
2013-05-30 16:19:33 +08:00
除了第一个 我还以为都是常用的..
DaniloSam
2013-05-30 16:29:24 +08:00
除了第一个 我还以为都是常用的..
NemoAlex
2013-05-30 16:36:20 +08:00
除了4以外其余的都是挺常用的吧
还有 Element && Element.onclick = function(){...}; 之类的写法
不过我觉得最能提现 JS 和 DOM 飘逸的还是 Element.innerHTML++;
哈哈
tulike1
2013-05-30 16:47:14 +08:00
取整: ~~(10.112) //=> 10
zhujinliang
2013-05-30 16:52:48 +08:00
@NemoAlex ④是一个同事有需要,我搜索一下发现的,不过也是最另我感慨的。。。这神思路。。。

&& 印象中它有陷阱(貌似某种情况下会报错),用if()代替比较好,记不清了
zhujinliang
2013-05-30 16:56:25 +08:00
@tulike1 这个运算符第一次见呢
cutehalo
2013-05-30 16:58:25 +08:00
木有见过第四个...
看标题脑补成精神病人思维广了...
NemoAlex
2013-05-30 17:02:15 +08:00
@zhujinliang 什么陷阱求解惑
switch
2013-05-30 17:14:49 +08:00
取整還有另一個:10.112 | 0
otakustay
2013-05-30 17:17:09 +08:00
第4个用来生成超大对象测内存用超好,这些都是js的常识了,我在和别人分享js的时候都有提到
https://skydrive.live.com/redir.aspx?resid=5AF9669191A78C07!584
middleware
2013-05-30 17:22:57 +08:00
① 最初关于 s-exp 的论文就定义了这种用法。
③ 这是 ① 的必然推论。
Lua 里 ①③ 都有。
songpengf117
2013-05-30 17:23:36 +08:00
1. 取整同时转成数值型:

'10.567890'|0
//结果: 10
'10.567890'^0
//结果: 10
-2.23456789|0
//结果: -2
~~-2.23456789
//结果: -2

2. 日期转数值:

var d = +new Date(); //1295698416792

3. 类数组对象转数组:

var arr = [].slice.call(arguments)

4. 漂亮的随机码:

Math.random().toString(16).substring(2); //14位
Math.random().toString(36).substring(2); //11位

5. 合并数组:

var a = [1,2,3];
var b = [4,5,6];
Array.prototype.push.apply(a, b);
uneval(a); //[1,2,3,4,5,6]

6. 用0补全位数:

function prefixInteger(num, length) {
return (num / Math.pow(10, length)).toFixed(length).substr(2);
}

7. 交换值:

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

8. 将一个数组插入另一个数组的指定位置:

var a = [1,2,3,7,8,9];
var b = [4,5,6];
var insertIndex = 3;
a.splice.apply(a, Array.concat(insertIndex, 0, b));
// a: 1,2,3,4,5,6,7,8,9

9. 删除数组元素:

var a = [1,2,3,4,5];
a.splice(3,1);

10. 快速取数组最大和最小值

Math.max.apply(Math, [1,2,3]) //3
Math.min.apply(Math, [1,2,3]) //1

11. 条件判断:

var a = b && 1;
//相当于
if (b) {
a = 1;
} else {
a = b;
}

var a = b || 1;
//相当于
if (b) {
a = b;
} else {
a = 1;
}

12. 判断IE(两种方法):

var ie = /*@cc_on !@*/false;
var ie = !-[1,];


http://blog.samxy.com/archives/307.html
chilaoqi
2013-05-30 17:28:53 +08:00
所以 ...js是魔幻语言,天天各种新奇的花式
alsotang
2013-05-30 17:30:20 +08:00
这正是 JS 语言设计得差劲的表现,很多常见需求都要 work around。
clowwindy
2013-05-30 18:33:13 +08:00
字符串转数字 +"100"
2code
2013-05-30 19:50:44 +08:00
大家看过这个没有 [WAT](https://www.destroyallsoftware.com/talks/wat)
11
2013-05-30 19:56:02 +08:00
我来组成头部

alexzhou
2013-05-30 20:00:14 +08:00
@11 都是英文版.....
11
2013-05-30 20:03:48 +08:00
@alexzhou 你没找到重点。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/70664

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX