解析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。
相关推荐
-
解析JavaScript中点号“.”的多义性
点号「.」在JavaScript中有两种语义 语义1.表示算术中的小数点(浮点数),如 2.5 语义2.取对象属性.方法,如 [].push(2) 这几乎没有任何难理解的地方,但下面这个问题则很有趣. 复制代码 代码如下: // 这行代码会如何执行 1.toString(); Firebug 中如下 这里的点号表达的是上述的语义1,因此点号后面必须跟一个数字,这里跟的是toString,报语法错了. 解决方法很简单,如加个小括号 复制代码 代码如下: (1).toString(); 还可以这么写
-
解析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中括号有四种语义 语义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中大括号“{}”的多义性
JS中大括号有四种语义作用 语义1,组织复合语句,这是最常见的 复制代码 代码如下: if( condition ) { //... }else { //... } for() { //... } 语义2,对象直接量声明 复制代码 代码如下: var obj = { name : 'jack', age : 23 }; 整个是个赋值语句,其中的{name:'jack',age:23}是个表达式. 语义3,声明函数或函数直接量 复制代码 代码如下: function f
-
全面解析JavaScript中“&&”和“||”操作符(总结篇)
1.||(逻辑或), 从字面上来说,只有前后都是false的时候才返回false,否则返回true. alert(true||false); // true alert(false||true); // true alert(true||true); // true alert(false||false); // false 这个傻子都知道~~ 但是,从深层意义上来说的话,却有另一番天地,试下面代码 alert(0||1);//1 显然,我们知道,前面0意味着false,而后面1意味着true,
-
全面解析JavaScript Module模式
简介 Module模式是JavaScript编程中一个非常通用的模式,一般情况下,大家都知道基本用法,本文尝试着给大家更多该模式的高级使用方式. 首先我们来看看Module模式的基本特征: 模块化,可重用 封装了变量和function,和全局的namaspace不接触,松耦合 只暴露可用public的方法,其它私有方法全部隐藏 关于Module模式,最早是由YUI的成员Eric Miraglia在4年前提出了这个概念,我们将从一个简单的例子来解释一下基本的用法(如果你已经非常熟悉了,请忽略这一节
-
解析Javascript设计模式Revealing Module 揭示模式单例模式
目录 1. Revealing Module 揭示模式 2. Singleton 单例模式 1. Revealing Module 揭示模式 该模式能够在私有范围内简单定义所有的函数和变量,并返回一个匿名对象, 它拥有指向私有函数的指针,该函数是他希望展示为公有的方法. 示例: <script> var myRevealingModule = function () { var privateVar = "Ren Cherry", publicVar = "Hey
-
javascript单引号和双引号的区别和处理
单引号和双引号其实没啥区别,看你自己习惯了 复制代码 代码如下: <input type="button" onclick="alert("1")">-------------------不正确 <input type="button" onclick="alert('1')">-------------------正确 双引号中再用双引号要这样: var str = "a
-
深入解析JavaScript中的立即执行函数
它是什么 在 JavaScript 里,每个函数,当被调用时,都会创建一个新的执行上下文.因为在函数里定义的变量和函数是唯一在内部被访问的变量,而不是在外部被访问的变量,当调用函数时,函数提供的上下文提供了一个非常简单的方法创建私有变量. function makeCounter() { var i = 0; return function(){ console.log(++i); }; } //记住:`counter`和`counter2`都有他们自己的变量 `i` var counter =
-
全面解析JavaScript中apply和call以及bind(推荐)
函数调用方法 在谈论JavaScript中apply.call和bind这三兄弟之前,我想先说下,函数的调用方式有哪些: •作为函数 •作为方法 •作为构造函数 •通过它们的call()和apply()方法间接调用 前面的三种调用方法,我们都知道且不在这篇文章的讨论范围内,就不说了. 下面我们来说说这第四种调用方法 通过call()和apply()间接调用 其实,我们可以将这两个函数看做是某个对象的方法,通过调用方法的方式来间接调用函数: function f(){} f.call(o); f.
随机推荐
- 浅谈Docker安全机制内核安全与容器之间的网络安全 原创
- PowerShell注册表操作命令总结
- jQuery plugin animsition使用小结
- android 手机截取长屏实例代码
- System.Runtime.InteropServices.COMException的解决方法
- PHP实现下载功能的代码
- php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
- php简单图像创建入门实例
- JavaScript根据数据生成百分比图和柱状图的实例代码
- 双表法调用样式表
- Java 锁的知识总结及实例代码
- node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
- PHP内核介绍及扩展开发指南—基础知识
- jQuery EasyUI API 中文文档 - Pagination分页
- jQuery LigerUI 使用教程入门篇
- Android开发中给EditText控件添加TextWatcher监听实现对输入字数的限制(推荐)
- php 获取select下拉列表框的值
- php创建sprite
- Android绘制验证码的实例代码
- web下载文件和跳转的方法