解析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 相关文章推荐
mouse_on_title.js
Aug 25 Javascript
JavaScript 事件记录使用说明
Oct 20 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
Feb 23 Javascript
用js来刷新当前页面保留参数的具体实现
Dec 23 Javascript
document.addEventListener使用介绍
Mar 07 Javascript
node.js中的http.request方法使用说明
Dec 14 Javascript
js鼠标悬浮出现遮罩层的方法
Jan 28 Javascript
深入理解JQuery中的事件与动画
May 18 Javascript
vue中的自定义分页插件组件的示例
Aug 18 Javascript
JAVA面试题 static关键字详解
Jul 16 Javascript
js prototype和__proto__的关系是什么
Aug 23 Javascript
微信小程序实现购物车功能
Nov 18 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 Mysql日期和时间函数集合
2007/11/16 PHP
PHP开发中常用的三个表单验证函数使用小结
2010/03/03 PHP
file_get_contents("php://input", "r")实例介绍
2013/07/01 PHP
php图片缩放实现方法
2014/02/20 PHP
php使用function_exists判断函数可用的方法
2014/11/19 PHP
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
PHP实现图片的等比缩放和Logo水印功能示例
2017/05/04 PHP
为何说PHP引用是个坑,要慎用
2018/04/02 PHP
做网页的一些技巧
2007/02/01 Javascript
地址栏传递中文参数乱码在js里用escape转码
2013/08/28 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
js实现刷新iframe的方法汇总
2015/04/27 Javascript
js模仿php中strtotime()与date()函数实现方法
2015/08/11 Javascript
Three.js的使用及绘制基础3D图形详解
2017/04/27 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
2018/10/29 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
2019/11/24 Javascript
微信小程序如何实现radio单选框单击打勾和取消
2020/01/21 Javascript
js将URL网址转为16进制加密与解密函数
2020/03/04 Javascript
如何利用javascript接收json信息并进行处理
2020/08/06 Javascript
vue中v-model对select的绑定操作
2020/08/31 Javascript
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
Python实现压缩与解压gzip大文件的方法
2016/09/18 Python
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
Python第三方Window模块文件的几种安装方法
2018/11/22 Python
python opencv读mp4视频的实例
2018/12/07 Python
python实现flappy bird小游戏
2018/12/24 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
2020/02/07 Python
TensorFLow 数学运算的示例代码
2020/04/21 Python
python如何删除列为空的行
2020/07/17 Python
三爱活动实施方案
2014/03/19 职场文书
2015年中个人总结范文
2015/03/10 职场文书
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python
MySQL索引是啥?不懂就问
2021/07/21 MySQL