`
joachimz
  • 浏览: 19070 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

魔鬼的细节:一个对Javascript的十年误解

 
阅读更多
早上不小心瞟到一篇文章,How Logical AND and OR Operators Actually Work in Javascript,才发现虽然我写了超过10年Javascript,却从来不知道这样的真相!

先说说这个误解,两个常用,及其简单的表达式:
expr1 && expr2

expr1 || expr2

我一直以为以为这是一个标准的boolean表达式,计算后的结果肯定是boolean类型而不会是其他,甚至记得有类似Trick把一个表达式转化为布尔类型。但具体规范让我吓一大跳:
引用
(Logical AND) Returns expr1 if it can be converted to false; otherwise, returns expr2. Thus, when used with Boolean values, && returns true if both operands are true; otherwise, returns false.

引用
(Logical OR) Returns expr1 if it can be converted to true; otherwise, returns expr2. Thus, when used with Boolean values, || returns true if either operand is true; if both are false, returns false.

很多情况下,居然返回的是表达式expr1或expr2的原值!再仔细想想,上述机制其实也一直在用,只是从没仔细考虑过工作原理,例如
config = config || {x:0, y:0}

我并不因此觉得JavaScript本身有任何问题,只是类似魔鬼细节太多,酷壳上这篇文章深入理解C语言也介绍了许多C语言的陷阱。因此需要我们有更加严谨、谦卑的态度,去做更加深入的学习,例如使用一个语言一段时间后,是否应该去认真的读读语言的规范?

类似误解过去犯过多次,再例如我03年前写的代码中,就有大量的地方在做DCL,类似这样:
    private Helper helper = null;
    public Helper getHelper() {
        if (helper == null) {
            synchronized(this) {
                if (helper == null) {
                    helper = new Helper();
                }
            }
        }
        return helper;
    }

现在我们都知道这个工作理论是有问题的,而且我在系统生产运行中发生的疑难问题,推测就是这个问题引发!

我不知道过去那么多年,写的那么多代码,参与设计的系统,还有传递给他人的知识,究竟有多少是建立在类似错误认识上的?在这么多错误基础上构建的系统,却一直在运行,我只能说,它是一个奇迹!
分享到:
评论

相关推荐

    2015年行测魔鬼训练:判断推理试题(卷)二与答案解析.doc

    2015年行测魔鬼训练:判断推理试题(卷)二与答案解析.doc

    论文研究 - 魔鬼病:MRI发现病例

    我们报告了一个没有特定先例的患者。 她表现为痉挛性四轻瘫,伴有左视力下降(4/10)。 自一年以来,一切都在不断发展。 MRI上的脊髓损伤,第二阶段的脑损伤外观影响了白色物质,并且在患者血清中发现了抗水通道...

    初中语文文学讨论名著导读魔鬼秀:恐怖电影的文化史

    总之,《初中语文文学讨论名著导读魔鬼秀:恐怖电影的文化史》这本书为我们提供了一个理解恐怖电影的新维度,让我们能够更深入地思考这个文化现象背后的深层意义。通过这种理解,我们不仅能够更好地欣赏恐怖电影作为...

    通达信魔鬼操盘手主图指标 源码 通达信.doc

    通达信魔鬼操盘手主图指标 源码 通达信.doc 通达信魔鬼操盘手主图指标是基于通达信平台的技术指标,用于股票市场分析和预测。该指标由多个移动平均线和指数移动平均线组成,旨在Capture市场趋势和短期波动。 1. ...

    五笔字型魔鬼训练法:五天突破1分钟100字

    书中还包含了一个“汉字拼音索引”,这对于遇到不熟悉的字根时快速查找拆分方法非常有帮助。另外,附录中也讲解了五笔字型输入法98版的内容、偏旁部首和难解字的打法,以及一些特殊功能键的使用技巧。 五笔字型...

    魔鬼作坊VIP模块例子:多进程远程注入dll

    标题"魔鬼作坊VIP模块例子:多进程远程注入dll"表明这可能是一个教程或示例,演示如何在多个进程中实现远程DLL注入。魔鬼作坊可能是一个在线学习平台或技术讨论社区,而VIP模块通常代表其提供的高级或专业内容。 多...

    魔鬼聊天术1

    【魔鬼聊天术1】是一本关于社交技巧和恋爱策略的书籍,由阮琦撰写,旨在帮助读者提升与他人,特别是异性之间的沟通能力。书中强调了搭讪作为一种有效的交友手段,并指出现代社会中,人们由于害怕被拒绝,往往选择...

    HTML5海底鲨鱼魔鬼鱼群游动画.zip

    首先,Canvas是一个二维绘图API,通过JavaScript来控制。在这个项目中,开发者可能使用了JavaScript来编写动画逻辑,包括鱼群的移动路径、速度、旋转角度等,使得鲨鱼和魔鬼鱼能够在屏幕上自由游动,模拟真实海洋...

    魔鬼作坊注入器

    魔鬼作坊注入器还提供了一个链接至“魔鬼作坊论坛.url”,这个在线社区或讨论区允许用户之间进行经验交流、提问和分享技巧。在这样的论坛中,用户可以与专业人士互动,获取实时的支持和反馈,这对于学习和解决实际...

    魔鬼打字-1.2ZIP

    总而言之,魔鬼打字-1.2ZIP是一个针对初学者设计的打字训练工具,通过ZIP格式压缩,便于下载和存储。其内置的各种功能和教学资源旨在帮助用户高效地提高打字技巧,是学习电脑基本操作和提升工作效率的好帮手。

    魔鬼作坊学习易语言

    综上所述,“魔鬼作坊学习易语言”不仅仅是一份普通的编程资源,它更是一个全面的学习平台,帮助编程初学者和进阶者在易语言的学习之路上不断前进。在这个平台上,你可以找到系统全面的教程、实用的开发工具和丰富的...

    金牌美容师魔鬼训练:抓往女性心灵的弱点

    相信在营销管理的你一定需要一款金牌美容师魔鬼训练:抓往女性心灵的弱点学习参考,而金牌美容师魔鬼训练...该文档为金牌美容师魔鬼训练:抓往女性心灵的弱点,是一份很不错的参考资料,具有较高参考价值,感兴趣的...

    魔鬼作坊OD

    "魔鬼作坊OD"可能是一个特定的OD解决方案或者一个定制化的服务,专门针对"魔鬼作坊"这个组织或社区的需求。 对象目录服务的核心是目录树结构,这种结构类似文件系统的目录结构,但存储的是网络对象的数据。每个对象...

    魔鬼作坊VIP模块V8.5.ec

    魔鬼作坊VIP模块V8.5.ec魔鬼作坊VIP模块V8.5.ec魔鬼作坊VIP模块V8.5.ec魔鬼作坊VIP模块V8.5.ec魔鬼作坊VIP模块V8.5.ec魔鬼作坊VIP模块V8.5.ec魔鬼作坊VIP模块V8.5.ec

    CE5.5魔鬼作坊进化版

    CE(Cheat Engine)本身是一个开源的调试工具,主要用于游戏作弊和内存调试,而魔鬼作坊进化版则是其一个定制化版本,针对一些特定功能进行了增强。 在这款工具中,你可以进行以下关键操作: 1. **内存扫描**:CE...

    CE6.1_魔鬼作坊优化版.rar

    总结起来,"CE6.1_魔鬼作坊优化版.rar"是一个经过第三方优化的Cheat Engine版本,具备稳定性和调试能力。压缩包内包含的文件涵盖了软件的执行、帮助文档、配置、升级、注入、调试以及脚本支持等多个方面,为用户提供...

    魔鬼作坊模vip

    魔鬼作坊模vip,作为一个独特的学习资源,旨在为IT专业人士提供深入、系统化的知识培训。这个压缩包文件中的"魔鬼作坊模块.txt"很可能包含了丰富的课程资料,可能是教程文本或者笔记,帮助我们探索和理解相关主题。 ...

    经典英文书籍——魔鬼词典

    ### 经典英文书籍《魔鬼词典》的知识点解析 #### 一、作品背景与作者简介 《魔鬼词典》是一本由美国作家安布罗斯·比尔斯(Ambrose Bierce)...它不仅是英语文学宝库中的瑰宝,也为后来的讽刺作品树立了一个典范。

    魔鬼作坊 模块注册机

    魔鬼作坊 模块注册机

Global site tag (gtag.js) - Google Analytics