解析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 相关文章推荐
js 延迟加载 改变JS的位置加快网页加载速度
Dec 11 Javascript
JQ技术实现注册页面带有校验密码强度
Jul 27 Javascript
JavaScript图像延迟加载库Echo.js
Apr 05 Javascript
Node.js批量给图片加水印的方法
Nov 15 Javascript
JavaScript实现解析INI文件内容的方法
Nov 17 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
Mar 15 Javascript
JavaScript数据结构之数组的表示方法示例
Apr 12 Javascript
angularjs中使用ng-bind-html和ng-include的实例
Apr 28 Javascript
VueJs组件prop验证简单介绍
Sep 12 Javascript
webpack构建换肤功能的思路详解
Nov 27 Javascript
原生JS实现的双色球功能示例
Feb 02 Javascript
小程序实现发表评论功能
Jul 06 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
pdo中使用参数化查询sql
2011/08/11 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
2014/11/25 PHP
php+mysql实现用户注册登陆的方法
2015/01/03 PHP
php编程每天必学之验证码
2016/03/03 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
php实现页面纯静态的实例代码
2017/06/21 PHP
详解PHP队列的实现
2019/03/14 PHP
php fread函数使用方法总结
2019/05/28 PHP
php桥接模式应用案例分析
2019/10/23 PHP
Avengerls vs Newbee BO3 第二场2.18
2021/03/10 DOTA
用JS剩余字数计算的代码
2008/07/03 Javascript
JavaScript 原型与继承说明
2010/06/09 Javascript
Javascript检查图片大小不要让大图片撑破页面
2014/11/04 Javascript
纯Javascript实现ping功能的方法
2015/03/20 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
vue-cli 为项目设置别名的方法
2019/10/15 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
Python的Django框架下管理站点的基本方法
2015/07/17 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
2020/06/30 Python
OSPF有什么优点?为什么OSPF比RIP收敛快?
2013/02/13 面试题
电大毕业自我鉴定
2014/02/03 职场文书
销售职业生涯规划范文
2014/03/14 职场文书
数学系毕业生求职信
2014/05/29 职场文书
语文教研活动总结
2014/07/02 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
刘公岛导游词
2015/02/05 职场文书
西安大雁塔导游词
2015/02/10 职场文书
2015年业务工作总结范文
2015/04/10 职场文书
Golang实现可重入锁的示例代码
2022/05/25 Golang