解析JavaScript中点号“.”的多义性_javascript技巧

点号「.」在JavaScript中有两种语义

语义1、表示算术中的小数点(浮点数),如 2.5

语义2、取对象属性、方法,如 [].push(2)

这几乎没有任何难理解的地方,但下面这个问题则很有趣。

复制代码 代码如下:

// 这行代码会如何执行
1.toString();

Firebug 中如下

这里的点号表达的是上述的语义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。

时间: 2024-11-05 12:15:12

解析JavaScript中点号“.”的多义性_javascript技巧的相关文章

解析JavaScript中点号“.”的多义性

 这篇文章主要介绍了JavaScript中点号"."的多义性.需要的朋友可以过来参考下,希望对大家有所帮助 点号「.」在JavaScript中有两种语义   语义1.表示算术中的小数点(浮点数),如 2.5   语义2.取对象属性.方法,如 [].push(2)   这几乎没有任何难理解的地方,但下面这个问题则很有趣.     代码如下: // 这行代码会如何执行  1.toString();    Firebug 中如下         这里的点号表达的是上述的语义1,因此点号后面必

解析Javascript小括号“()”的多义性_javascript技巧

Javascript中小括号有五种语义 语义1,函数声明时参数表 复制代码 代码如下: function func(arg1,arg2){   // ... } 语义2,和一些语句联合使用以达到某些限定作用 复制代码 代码如下: // 和for in一起使用 for(var a in obj){   // ... } // 和if一起使用 if(boo){   //... } // 和while一起使用 while(boo){   // ... } // 和do while一起使用 do{  

解析Javascript中中括号“[]”的多义性_javascript技巧

Javascript中括号有四种语义 语义1,声明数组 复制代码 代码如下: var ary = []; // 声明一个空数组var ary = [1,3]; // 声明一个数组,同时赋初值 语义2,取数组成员 复制代码 代码如下: var ary = [1,2,3];var item = ary[0]; 语义3,定义对象成员 (可以不遵循标识符规则 ) 复制代码 代码如下: var obj = {}; // 为obj添加一个属性name,name是合法的标识符,即也可以通过obj.name方式

解析Javascript中大括号“{}”的多义性_javascript技巧

JS中大括号有四种语义作用 语义1,组织复合语句,这是最常见的 复制代码 代码如下: if( condition ) {   //... }else {   //... } for() {   //... } 语义2,对象直接量声明 复制代码 代码如下: var obj = {     name : 'jack',     age : 23 }; 整个是个赋值语句,其中的{name:'jack',age:23}是个表达式. 语义3,声明函数或函数直接量 复制代码 代码如下: function f

解析javascript中鼠标滚轮事件_javascript技巧

所有的现代浏览器都支持鼠标滚轮,并且在用户滚动滚轮时触发时间.浏览器通常使用鼠标滚轮滚动或缩放文档,但可以通过取消mousewheel事件来阻止这些默认操作.有一些互用性问题影响滚轮事件,但是编写跨平台的代码依旧可以行.除了Firefox之外的所有浏览器都支持"mousewheel"事件,但Firefox使用"DOMMouseScroll",而3级DOM事件规范草案建议使用事件名"wheel"替代"mousewheel". d

解析Javascript单例模式概念与实例_javascript技巧

前言 和其他编程语言一样,Javascript同样拥有着很多种设计模式,比如单例模式.代理模式.观察者模式等,熟练运用Javascript的设计模式可以使我们的代码逻辑更加清晰,并且更加易于维护和重构. 本文将介绍Javascript模式中较为常见和实用的模式--单例模式,主要分为概念和实例部分.在介绍实例的同时也会对代码中额外的知识点进行讲解. 单例模式概念 首先什么是单例模式?可以这样理解:单例模式旨在保证一个类仅有一个实例,并提供一个全局的访问点. 可能有人还是不太理解单例的概念,那么你可

深入解析JavaScript中的变量作用域_javascript技巧

在学习JavaScript的变量作用域之前,我们应当明确几点: •JavaScript的变量作用域是基于其特有的作用域链的. •JavaScript没有块级作用域. •函数中声明的变量在整个函数中都有定义. 1.JavaScript的作用域链首先看下下面这段代码: 复制代码 代码如下: <script type="text/javascript"> var rain = 1; function rainman(){ var man = 2; function inner()

详细讲解JavaScript中的this绑定_javascript技巧

this 可以说是 javascript 中最耐人寻味的一个特性,就像高中英语里各种时态,比如被动时态,过去时,现在时,过去进行时一样,无论弄错过多少次,下一次依然可能弄错.本文启发于<你不知道的JavaScript上卷>,对 javasript 中的 this 进行一个总结. 学习 this 的第一步就是明白 this 既不是指向函数自身也不指向函数的作用域.this 实际上是在函数被调用时发生的绑定,它指向什么地方完全取决于函数在哪里被调用. 默认绑定 在 javascript 中 ,最常

Javascript的并行运算实现代码_javascript技巧

下面我就个人观点猜测一下,并行运算将会怎样支持前端javascript的. 1 不太可能的进化 显示线程的支持 如果在Javascript中支持显示线程,那么可能是一种灾难,目前的浏览器解析Javascript并执行都是在浏览器的ui线程中工作的. 比如你可以在Javascript中运行while(true),这时浏览器界面就会停止响应.或者通过我之前的文章(编译Javascript引擎,为JavaScript提供睡眠功能:http://www.cnblogs.com/ioriwellings/