JavaScript之毒瘤
0、导言
JavaScript中有许多难以避免的问题特性。接下来就一一揭示。
1、全局变量
在所有JavaScript的糟糕特性中,最为糟糕的就是全局变量的依赖。全局变量使得在同一个程序中运行独立的子程序变得更难。
2、作用域
JavaScript是类C的语法,但是却没有提供类C的块级作用域。
3、自动插入分号
JavaScript有一个自动修复机制,会试图通过自动插入分号来修正有缺损的程序,但是它有可能掩盖更为严重的错误。
4、保留字
有太多的单词在JavaScript中被保留,它们不能用来命名变量或者函数(在大部分执行环境下,部分关键字是可用的)。
5、Unicode字符
JavaScript设计之初,Unicode预计只会有65536个字符。实际上,到现在Unicode有多大百万个字符。这也就导致了JavaScript会认为一对字符是两个不同的字符(Unicode把一对字符视为一个单一的字符)
6、typeof
不要指望typeof返回的类型。比如null或者是检测对象,另外检测正则可能会返回function或者是object。
7、parseInt
parseInt把一个字符串转换为整数,会在遇到非数字时停止解析。另外如果第一个字符是0,还会按照8进制来取值。
8、运算符(+)
+运算符可以用于加法运算或者是字符串连接,究竟如何执行会取决于其参数类型。
9、 浮点数
二进制浮点数不能正确的处理十进制小数,因此0.1+0.2 不等于0.3。
10、NaN
NaN是一个特殊的数量值,它表示不是一个数字。也是唯一一个不等于自身的JavaScript数值。
11、伪数组
JavaScript没有真正的数组,就连Array也是通过object来模拟的,如果完全达不到真正的数组的地步。同时typeof运算符也不能辨别数组和对象。
12、假值
JavaScript中包含诸多的假值,如: 0, NaN, '', false, null, undefined
13、hasOwnProperty
hasOwnProperty方法被用做一个过滤器来避开for..in语句的隐患,但hasOwnProperty是一个普通的方法,所以是可以被重写的。
14、对象
JavaScript的对象,永远不会是真的空对象,因为可以从原形链取得成员属性。
转载于:https://www.cnblogs.com/humin/p/5036374.html
JavaScript之毒瘤相关推荐
- 经典面试题(5):小心javascript自动插入分号机制
在<JavaScript语言精粹>这本书里,这个"自动插入分号"机制被划入到了JavaScript的毒瘤里面,与之并列的前面的全局变量. 有些时候,不合时宜地插入分号, ...
- JavaScript语言精粹-毒瘤、糟粕(应对)
毒瘤 不使用全局变量 使用块级作用域,不var return与返回值要位于同一行,否则当自动插入分号后会返回undefined 当对象的属性名与js保留字相同时,无法使用点语法,使用括号表示法 js字 ...
- javascript语言精粹 微盘_JavaScript语言精粹(修订版)pdf
摘要 "学习.理解.实践大师的思想,我们才有可能站在巨人的肩上,才有机会赶超大师,这本书就是开始." "这是一本介绍JavaScript语言本质的重要书籍,值得任何正在或 ...
- JavaScript的1000+篇文章总结
JavaScript的1000+篇文章总结 本文收集和总结了有关JavaScript的1000+篇文章,由于篇幅有限只能总结近期的内容,想了解更多内容可以访问:http://www.ai2news.c ...
- ThoughtWorks技术顾问说低代码是“行业毒瘤”,你怎么看?
使用低代码平台写出来的代码既难以维护,又难以测试,同时它还给行业传递了非常不好的信号,"程序员的价值是不值钱的",最终造成的结果就是一些不具备编程专业技能的人,使用极不趁手.效率低 ...
- 【AJAX】JavaScript的面向对象
Ajax中后端数据返回后需要前端通过JavaScript来实现动态数据更新的问题.所以,在Ajax中加深了一遍JavaScript面向对象的印象. 基础部分: JavaScript中创建对象并简单对象 ...
- 【JavaScript总结】JavaScript语法基础:JS高级语法
作用域链: 1.JS中只有函数能够限定作用域的范围: 2.变量处理在制定的函数范围内,还有一个特殊的作用域,就是没有用var 声明的全局作用域 3.js中的作用域链是为了清晰的表示出所有变量的作用范围 ...
- 【JavaScript总结】JavaScript语法基础:DOM
->DOM的理解:文档对应dom树 ->有了DOM能做什么:DOM的操作 html文档做为DOM树模型,DOM树的节点就是对象.对象会触发事件来执行一些事件代码. C#中的事件是一个委托变 ...
- 【JavaScript总结】JavaScript语法基础:JS编码
运算符 数学:+. -. *. / 逻辑:>. < .>= .<=. == . !=.&&.|| . === .!==(完全等于) 对象相关 new delet ...
- 【JavaScript总结】JavaScript语法基础:数据类型
------>数据类型有哪些? ->基本类型:数字类型,布尔类型,字符串类型 ->引用类型:对象类型,函数类型 ->空类型:null 和 undefined ->运算符: ...
最新文章
- 网络框架 - 收藏集 - 掘金
- AI人才报告 | AI稳超互联网平均薪资,哪些细分领域最受追捧?
- JZOJ 5440. 【NOIP2017提高A组冲刺11.1】背包
- java 写文件时,输入换行字符.
- 名副其实!华为天才少年身份曝光!
- 除了国内红海拼刀,移动 App 在海外能否挖到新机会?
- Sql Server 事务日志(二)
- Ros学习笔记(二)创建功能包
- GET data:image/jpg;base64,35,37,....... net::ERR_INVALID_URL
- 入侵修改服务器内容,怎么入侵服务器修改数据库
- 微波放大器和混频器的测试
- openlayers4加载百度地图、百度影像图、谷歌地图、谷歌影像图
- PPP / PPPoE
- 机器学习偏见可能会定义少数族裔的健康状况
- 8_future_threading_multiprocessing的封装(线程进程的高级api)
- 嵌入式系统考试题库(CSU)
- Android百度地图屏蔽油站,怎么用android百度地图api获取离当前位置最近的加油站...
- Wi-Fi 6关键技术及产业进展
- css实现简单的头像遮罩效果
- CSDN发表文章后待审核的原因