解析JavaScript中点号“.”的多义性


Posted in Javascript onDecember 02, 2013

点号「.」在JavaScript中有两种语义

语义1、表示算术中的小数点(浮点数),如 2.5

语义2、取对象属性、方法,如 [].push(2)

这几乎没有任何难理解的地方,但下面这个问题则很有趣。

// 这行代码会如何执行 
1.toString();

Firebug 中如下解析JavaScript中点号“.”的多义性

这里的点号表达的是上述的语义1,因此点号后面必须跟一个数字,这里跟的是toString,报语法错了。

解决方法很简单,如加个小括号

(1).toString();

还可以这么写,但难理解些
1..toString();

之所以浏览器中都能运行,是因为各浏览器JS引擎都把“1..toString()”理解成了 “1.0.toString()”。这里第一个点号是语义1,第二个点号是语义2。

还有更奇怪的写法,竟然也没有报错

1 .toString(); // 注意点号前面有一个空格

显然,这里的点号是语义2,即JS引擎会忽略点运算符前边的空格,其实无论前后的空格都会忽略。如下
1 . toString(); // 点号前后都有一个空格 
1  .  toString(); // 点号前后各有两个空格 
1    .toString(); // 点号前有一个tab 
1    .    toString(); // 点号前后各有一个tab

JS引擎不但会忽略空格,也会忽略tab。
Javascript 相关文章推荐
表单的一些基本用法与技巧
Jul 15 Javascript
javascript之ESC(第二类混淆)
May 06 Javascript
js+css在交互上的应用
Jul 18 Javascript
javascript的内存管理详解
Aug 07 Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
Mar 15 Javascript
12行javascript代码绘制一个八卦图
Apr 02 Javascript
JavaScript判断前缀、后缀是否是空格的方法
Apr 15 Javascript
javascript实现3D变换的立体圆圈实例
Aug 06 Javascript
js简单设置与使用cookie的方法
Jan 22 Javascript
阿里云ecs服务器中安装部署node.js的步骤
Oct 08 Javascript
jquery实现点击页面回到顶部
Nov 23 Javascript
jQuery Ajax全解析
Feb 13 Javascript
解析JavaScript中的不可见数据类型
Dec 02 #Javascript
Jquery使用Firefox FireBug插件调试Ajax步骤讲解
Dec 02 #Javascript
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
Dec 02 #Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
Dec 02 #Javascript
javascript中对Attr(dom中属性)的操作示例讲解
Dec 02 #Javascript
浅析jquery的作用与优势
Dec 02 #Javascript
jquery获取css中的选择器(实例讲解)
Dec 02 #Javascript
You might like
php设计模式之命令模式使用示例
2014/03/02 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
2016/01/09 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
PHP递归实现汉诺塔问题的方法示例
2017/11/25 PHP
php5.x禁用eval的操作方法
2018/10/19 PHP
document 和 document.all 分别什么时候用
2006/06/22 Javascript
javascript+css 网页每次加载不同样式的实现方法
2009/12/27 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
2016/06/21 Javascript
bootstrap css样式之表单
2017/01/19 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
ionic2自定义cordova插件开发以及使用(Android)
2017/06/19 Javascript
jQuery实现键盘回车搜索功能
2017/07/25 jQuery
js实现移动端轮播图效果
2020/12/09 Javascript
JS设计模式之状态模式概念与用法分析
2018/02/05 Javascript
vue路由缓存的几种实现方式小结
2020/02/02 Javascript
vue Element左侧无限级菜单实现
2020/06/10 Javascript
python任务调度实例分析
2015/05/19 Python
python访问抓取网页常用命令总结
2017/04/11 Python
python opencv设置摄像头分辨率以及各个参数的方法
2018/04/02 Python
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
使用Python编写Prometheus监控的方法
2018/10/15 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
pandas中read_csv、rolling、expanding用法详解
2020/04/21 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
英国定做窗帘和纺织品面料一站式商店:Dekoria
2018/08/29 全球购物
医院护士的求职信范文
2013/12/26 职场文书
社区志愿者心得体会
2014/01/03 职场文书
入党自我评价优缺点
2014/01/25 职场文书
村干部四风问题整改措施
2014/09/30 职场文书
虚拟机linux端mysql数据库无法远程访问的解决办法
2021/05/26 MySQL
详细介绍python类及类的用法
2021/05/31 Python
实例详解Python的进程,线程和协程
2022/03/13 Python
spring boot实现文件上传
2022/08/14 Java/Android