解析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 相关文章推荐
Javascript实现简单的富文本编辑器附演示
Jun 16 Javascript
jQuery针对各类元素操作基础教程
Aug 29 Javascript
JS实现倒计时和文字滚动的效果实例
Oct 29 Javascript
最流行的Node.js精简型和全栈型开发框架介绍
Feb 26 Javascript
如何用JS判断两个数字的大小
Jul 21 Javascript
JavaScript实现星星等级评价功能
Mar 22 Javascript
Django+Vue实现WebSocket连接的示例代码
May 28 Javascript
JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结
Jun 27 Javascript
layui自定义插件citySelect实现省市区三级联动选择
Jul 26 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
Oct 30 Javascript
微信小程序实现带放大效果的轮播图
May 26 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
Oct 22 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 Smarty初体验二 获取配置信息
2011/08/08 PHP
php获取远程文件大小
2015/10/20 PHP
php实现登陆模块功能示例
2016/10/20 PHP
php有效防止图片盗用、盗链的两种方法
2016/11/01 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
我的Node.js学习之路(二)NPM模块管理
2014/07/06 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
2015/03/12 Javascript
BootStrap文件上传样式超好看【持续更新】
2016/05/10 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
浅谈angularJS中的事件
2016/07/12 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
2016/08/30 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
Bootstrap整体框架之JavaScript插件架构
2016/12/15 Javascript
jQuery表单验证之密码确认
2017/05/22 jQuery
在vue中添加Echarts图表的基本使用教程
2017/11/22 Javascript
vue.js绑定事件监听器示例【基于v-on事件绑定】
2018/07/07 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
2019/09/04 Javascript
JSON stringify方法原理及实例解析
2020/10/23 Javascript
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
Python实现基本线性数据结构
2016/08/22 Python
python+selenium开发环境搭建图文教程
2017/08/11 Python
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
2018/03/23 Python
python自动化测试之如何解析excel文件
2019/06/27 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
django框架cookie和session用法实例详解
2019/12/10 Python
解决Python使用列表副本的问题
2019/12/19 Python
Python HTTP下载文件并显示下载进度条功能的实现
2020/04/02 Python
一文轻松掌握python语言命名规范规则
2020/06/18 Python
HTML5实现桌面通知 提示功能
2017/10/11 HTML / CSS
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
C#笔试题
2015/07/14 面试题
软件测试工程师结构化面试题库
2016/11/23 面试题
转预备党员政审材料
2014/02/06 职场文书