解析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 相关文章推荐
jquery validate使用攻略 第四步
Jul 01 Javascript
JsDom 编程小结
Aug 09 Javascript
JS获得URL超链接的参数值实例代码
Jun 21 Javascript
js获取IP和PcName(IE)在vs中可用
Aug 02 Javascript
js使用cookie记录用户名的方法
Nov 26 Javascript
JS跨域解决方案之使用CORS实现跨域
Apr 14 Javascript
JS获取屏幕高度的简单实现代码
May 24 Javascript
利用vue.js实现被选中状态的改变方法
Feb 08 Javascript
详解vue中的父子传值双向绑定及数据更新问题
Jun 13 Javascript
ES6箭头函数和扩展实例分析
May 23 Javascript
vue created钩子函数与mounted钩子函数的用法区别
Nov 05 Javascript
Vue页面渲染中key的应用实例教程
Jan 12 Vue.js
解析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/01/24 PHP
php的4种常见运行方式
2015/03/20 PHP
php上传大文件失败的原因及应对策略
2015/10/20 PHP
Yii2主题(Theme)用法详解
2016/07/23 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
jQuery前台数据获取实现代码
2011/03/16 Javascript
jquery异步请求实例代码
2011/06/21 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
Javascript技术栈中的四种依赖注入详解
2016/02/23 Javascript
jQuery表单验证插件解析(推荐)
2016/07/21 Javascript
利用angular.copy取消变量的双向绑定与解析
2016/11/25 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
2017/01/22 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
JS检测window.open打开的窗口是否关闭
2017/06/25 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
详解angularjs popup-table 弹出框表格指令
2017/09/20 Javascript
Vue实现内部组件轮播切换效果的示例代码
2018/04/07 Javascript
[42:32]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.27
2020/12/01 DOTA
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
Python检查ping终端的方法
2019/01/26 Python
python抖音表白程序源代码
2019/04/07 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
python列表的逆序遍历实现
2020/04/20 Python
Python的信号库Blinker用法详解
2020/12/31 Python
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
美国购买新书和二手书网站:Better World Books
2018/10/31 全球购物
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
安全生产标语
2014/06/06 职场文书
销售顾问工作计划书
2014/08/15 职场文书
中学生纪念九一八事变演讲稿
2014/09/14 职场文书
颐和园导游词
2015/01/30 职场文书
职工培训工作总结
2015/08/10 职场文书
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL
Mysql事务索引知识汇总
2022/03/17 MySQL