V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
zhujinliang
V2EX  ›  JavaScript

果然javascript程序员思维广啊

  •  
  •   zhujinliang · 2013-05-30 16:07:08 +08:00 · 7015 次点击
    这是一个创建于 4200 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ① 使用 || 从多个变量中取出第一个可用变量
    比如 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就是我们看到的结果。。。

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

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

    && 印象中它有陷阱(貌似某种情况下会报错),用if()代替比较好,记不清了
    zhujinliang
        7
    zhujinliang  
    OP
       2013-05-30 16:56:25 +08:00
    @tulike1 这个运算符第一次见呢
    cutehalo
        8
    cutehalo  
       2013-05-30 16:58:25 +08:00
    木有见过第四个...
    看标题脑补成精神病人思维广了...
    NemoAlex
        9
    NemoAlex  
       2013-05-30 17:02:15 +08:00
    @zhujinliang 什么陷阱求解惑
    switch
        10
    switch  
       2013-05-30 17:14:49 +08:00
    取整還有另一個:10.112 | 0
    otakustay
        11
    otakustay  
       2013-05-30 17:17:09 +08:00
    第4个用来生成超大对象测内存用超好,这些都是js的常识了,我在和别人分享js的时候都有提到
    https://skydrive.live.com/redir.aspx?resid=5AF9669191A78C07!584
    middleware
        12
    middleware  
       2013-05-30 17:22:57 +08:00   ❤️ 1
    ① 最初关于 s-exp 的论文就定义了这种用法。
    ③ 这是 ① 的必然推论。
    Lua 里 ①③ 都有。
    songpengf117
        13
    songpengf117  
       2013-05-30 17:23:36 +08:00   ❤️ 4
    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
        14
    chilaoqi  
       2013-05-30 17:28:53 +08:00   ❤️ 1
    所以 ...js是魔幻语言,天天各种新奇的花式
    alsotang
        15
    alsotang  
       2013-05-30 17:30:20 +08:00
    这正是 JS 语言设计得差劲的表现,很多常见需求都要 work around。
    clowwindy
        16
    clowwindy  
       2013-05-30 18:33:13 +08:00
    字符串转数字 +"100"
    2code
        17
    2code  
       2013-05-30 19:50:44 +08:00
    大家看过这个没有 [WAT](https://www.destroyallsoftware.com/talks/wat)
    11
        18
    11  
       2013-05-30 19:56:02 +08:00   ❤️ 4
    我来组成头部

    alexzhou
        19
    alexzhou  
       2013-05-30 20:00:14 +08:00
    @11 都是英文版.....
    11
        20
    11  
       2013-05-30 20:03:48 +08:00
    @alexzhou 你没找到重点。。
    alexzhou
        21
    alexzhou  
       2013-05-30 20:09:35 +08:00
    @11 竟然在黑我大JS ,js好的部分不可能这么少,坏的部分一大堆 哈哈
    ghyghoo8
        22
    ghyghoo8  
       2013-05-30 20:10:29 +08:00
    大惊小怪啊~
    skydiver
        23
    skydiver  
       2013-05-30 20:12:21 +08:00
    @11 明白重点。。组成头部是啥意思?
    archer1218
        24
    archer1218  
       2013-05-30 20:44:47 +08:00
    @11 超级大亮,哈哈
    spark
        25
    spark  
       2013-05-30 20:55:54 +08:00
    @skydiver 变形金刚没看过?
    cutehalo
        26
    cutehalo  
       2013-05-30 21:04:36 +08:00
    @skydiver 你来组成头部 我来组成屁股 233
    heroicYang
        27
    heroicYang  
       2013-05-30 21:05:11 +08:00
    其实我想说的是,在多人参与的项目中最好不要使用类似大家整理出来的这些magic
    Mutoo
        28
    Mutoo  
       2013-05-30 21:11:58 +08:00
    function max(a,b){return a>b&&a||b;}

    [1,2,3,4,5].sort(function(){return Math.random()<.5?-1:1;}); //随机排序
    luikore
        29
    luikore  
       2013-05-30 21:20:34 +08:00
    除了判断 IE 那个 (而且是对各 IE 效果不同... 判断 IE 统一用 if IE 注释就好了), 其他都是基础吧, 应该是看不懂的就别码了...
    switch
        30
    switch  
       2013-05-30 21:27:58 +08:00
    @Mutoo 取最大值有原生的 Math.max 函数的
    skydiver
        31
    skydiver  
       2013-05-31 00:09:13 +08:00
    楼主的几条,看一下混淆过的js代码就发现了。。很多类似的巧妙的写法
    workaholic
        32
    workaholic  
       2013-05-31 07:54:00 +08:00
    javascript之美就在这里,灵活
    exoticknight
        33
    exoticknight  
       2013-05-31 11:29:09 +08:00
    总感觉可以这么写不太好。似乎很机智实际太诡异。
    Golevka
        34
    Golevka  
       2013-05-31 11:39:05 +08:00
    @11 高级黑...
    riophae
        35
    riophae  
       2013-05-31 18:08:55 +08:00
    JavaScript 好玩的地方非常多, 我首先想到的是这个:
    (function() {})();
    ldb1992
        36
    ldb1992  
       2013-05-31 19:10:43 +08:00
    恩恩,不错
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1343 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:45 · PVG 01:45 · LAX 09:45 · JFK 12:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.