解析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技术技巧大全(五)
Jan 22 Javascript
javascript 学习之旅 (1)
Feb 05 Javascript
js表格分页实现代码
Sep 18 Javascript
js 父窗口控制子窗口的行为-打开,关闭,重定位,回复
Apr 20 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
Sep 29 Javascript
跟我学习javascript的闭包
Nov 16 Javascript
JS实现获取当前URL和来源URL的方法
Aug 24 Javascript
Javascript基础回顾之(一) 类型
Jan 31 Javascript
详解用Node.js实现Restful风格webservice
Sep 29 Javascript
React 父子组件通信的实现方法
Dec 05 Javascript
解决Can't find variable: SockJS vue项目的问题
Sep 22 Javascript
如何开发一个渐进式Web应用程序PWA
May 10 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后台多用户权限组思路与实现程序代码分享
2012/02/13 PHP
php实现约瑟夫问题的方法小结
2015/03/23 PHP
PHP使用递归生成文章树
2015/04/21 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
php中yar框架实例用法讲解
2020/12/27 PHP
JavaScript函数的4种调用方法详解
2014/04/22 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
2015/05/08 Javascript
jQuery获取页面元素绝对与相对位置的方法
2015/06/10 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
jquery动态切换背景图片的简单实现方法
2016/05/14 Javascript
jQuery实现花式轮播之圣诞节礼物传送效果
2016/12/25 Javascript
jquery实现焦点轮播效果
2017/02/23 Javascript
js实现放大镜特效
2017/05/18 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
jackson解析json字符串,首字母大写会自动转为小写的方法
2017/12/22 Javascript
深入理解JavaScript 箭头函数
2019/05/30 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
vue-cli配置flexible过程详解
2019/07/04 Javascript
对Python中DataFrame按照行遍历的方法
2018/04/08 Python
python批量解压zip文件的方法
2019/08/20 Python
Python PyInstaller库基本使用方法分析
2019/12/12 Python
python操作cfg配置文件方式
2019/12/22 Python
python实现简单学生信息管理系统
2020/04/09 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
2020/10/18 Python
骆驼官方商城:CAMEL
2016/11/22 全球购物
Answear匈牙利:来自全球200多个知名时尚品牌
2017/04/21 全球购物
经济学人订阅:The Economist
2018/07/19 全球购物
一份软件工程师的面试试题
2016/02/01 面试题
轻金属冶金专业毕业生自荐信
2013/11/02 职场文书
司机的工作范围及职责
2013/11/13 职场文书
考试作弊被抓检讨书
2014/01/10 职场文书
学习雷锋月活动总结
2014/07/03 职场文书
入股合作协议书
2014/10/12 职场文书
清空 Oracle 安装记录并重新安装
2022/04/26 Oracle
nginx静态资源的服务器配置方法
2022/07/07 Servers