解析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.
随机推荐
- Jquery中offset()和position()的区别分析
- Windows 2003如何转换成PC版系统
- GridView中checkbox"全选/取消"完美兼容IE和Firefox
- Android基础知识之frame动画效果
- C/C++回调函数介绍
- yii2带搜索功能的下拉框实例详解
- windows下Apache+MySql+PHP3+PHP4+PERL安装配置
- Java中如何调用cmd压缩文件
- js内置对象处理_打印学生成绩单的简单实现
- vs2010出现error MSB8008的解决方法
- centos 6.7 下安装 redis-3.2.5的步骤
- oracle怎么删除用户提供解决方案
- 基于jQuery实现仿QQ空间送礼物功能代码
- 微信小程序 教程之wxapp视图容器 swiper
- 复选框全选与全不选操作实现思路
- Bootstrap table的使用方法
- PHP字符串的递增和递减示例介绍
- Android提高之蓝牙隐藏API探秘
- Android中NestedScrolling滑动机制详解
- PHP使用函数静态变量实现指定迭代次数的方法