js:语言精髓笔记4----面向对象概要与运算符二义性
实例创建:obj = new contructor[(arguments)]; //如果没有参数可以忽略括号;所以注意这不是函数调用;
直接量与初始器:在之前的基本表达式中将直接量与初始器分开,这时因为直接量的声明中不包括运算过程,而初始器的声明中可以包括运算过程。
- 直接量:一般分为6种,包括正则表达式声明;在引擎看来,其值是在编译期就确知的;
 - 初始器:包括函数,对象,数组声明;其本身可能是无法预期的。
 
对象:
- delete:能删除对象的大多数成员,包括全局对象Global的成员;不能删除var声明变量和直接继承自原型的成员;仅在删除一个不能删除的成员时才会返回false;
 - in:对象成员检查(包括继承和不可枚举):string in object;
 - for/in:枚举对象成员(包括继承);
 - propertyIsEnumerable():枚举对象成员(不包括继承);
 
具有二义性的语法元素:(注意运算符和非运算符)
- ,
- 连续运算符;
 - 参数分隔符;
 - 对象/数组声明分隔符;
 
 - +
- 增值运算符;
 - 正值运算符;
 - 连接运算符
 
 - ()
- 函数调用运算符;
 - 强制运算,优先级;
 - 形式参数表;
 
 - ?:  (问号没有二义性)
- 条件运算符;
 - 冒号声明标签含义;
 - 冒号声明switch分支含义;
 - 冒号声明对象成员的含义;
 
 - []
- 数组下标;(运算符)
 - 对象成员存取;(运算符)
 - 数组直接量声明;
 
 - {}
- 函数直接量代码部分声明;
 - 对象直接量声明;
 - 复合语句;
 
 - ;
- 空语句;
 - 语句分隔符;
 
 
加号:
- 字符串连接优先;
 - 特别注意在DOM模型中使用;
 
var el = document.getElementById(‘testpic’);
var value = parseInt(el.style.borderWidth); //值
var nuit = el.style.borderWidth.substr(value.toString().length); //单位
括号:
- 只做传值参数表: new;
 - 限定表达式的词法元素:具有将表达式结果转化为布尔值的副作用;
 - 强制表达式运算:如优先级;连续运算符运算,返回值为表达式最后一个值;
 - 函数/方法调用:一般此时括号前无空格,其他情况会有空格;注意标签与运算元是属于两个不同的标识符系统,所以不可以这样使用:
 
break (my_label)
逗号:
- 连续运算符; 如 :
 a = (1,2,3);//a为3,这个整个表达式返回3
a = 1,2,3;//a为1,这个整个表达式返回3
注意:
var i = 100;
alert(i +=20, i *=2, value); //函数中,逗号也作为连续运算,alert为函数只能传入第一个参数;
- 语法分隔符; 如:
var a = 1,2,3; //声明语句会将逗号解析成分隔符而出错;(var会使连续运算表达式变为连续声明语句)
 
方括号:
由于方括号具有取值和数组直接量声明的功能;下面代码都无错误:
var a = [1] [1];
var b = {} [0];
需要注意的是当方括号作为数组直接量声明的时候,逗号为语法分隔符:
var a = ['c',1,10];
当方括号作为对象或数组取值的时候,逗号为连续运算符:
var a = ['c',12,2] ['c',12,2] //等价于 ['c',12,2] [2] ;a = 2;
(这里就要注意在写[[],[],[]]形式的时候漏掉逗号是不会报错的);
js:语言精髓笔记4----面向对象概要与运算符二义性的更多相关文章
- js:语言精髓笔记11--动态语言特性(1)
		
语言:程序最终被表达为数据(结构)和逻辑(算法),命令式和说明式/函数式语言分别从这两方面分类: 动态:在语言陈述时无法确定,必须在计算机执行时才能确定语言关系:JS是完全动态语言,导致其不确定性一般 ...
 - js:语言精髓笔记7----原型继承
		
面向对象有三个基本特性:封装,继承,多态:如果都满足的话称为面向对象语言:而部分满足则称为基于对象语言: 数据类型实现模型描述: JavaScript对象模型: 构造过程:函数->构造器 构造器 ...
 - js:语言精髓笔记5----语言分类
		
计算模型:源于对计算过程的不同认识: 1.基于不同计算模型一般分为://教科书的一般分类 命令式语言: 函数式语言: 逻辑式语言: 面向对象程序设计语言: 2.基于程序本质分类: //编程的经典法则 ...
 - js:语言精髓笔记1--标识符与基本类型
		
标识符: 命名: 语法以及类型----语法关键字 //逻辑 值(的存储位置)----变量和常量 ...
 - js:语言精髓笔记12--动态语言特性(2)
		
对于括号内: 通过赋值时发生的重写: (Object1 = function() {}).prototype.value = 100; var obj1 = new Object1; console. ...
 - js:语言精髓笔记9--函数式语言特征
		
形式化运算系统的研究: 图灵:提出图灵机形式系统,通过0,1运算系统来解决复杂问题: 冯诺依曼:提出了冯诺依曼体系:即通过修改内存反映运算结果: 阿隆左.丘奇:提出新的运算范型Lambda演算,计算机 ...
 - js:语言精髓笔记8--对象系统
		
封装: 一把对象系统,封装是由语法解析来实现的,即语法作用域:但js是动态语言,因此只能依赖变量作用域: js的变量作用域只有表达式,函数,全局三种:所以js只能实现public和private两种封 ...
 - js:语言精髓笔记10--闭包
		
闭包: //JS函数式风格中,在内部保存数据和对外无副作用这两个特性主要就是通过闭包实现的: 函数与闭包: 一个函数是一段静态代码,它是一个代码书写时已经编译期,静态概念:闭包是函数在代码运行过程中 ...
 - js:语言精髓笔记6----作用域
		
js基础语法:由语句.表达式和变量构成: 语句是主要表达方式:单语句->复合语句(代码块)->程序片段(函数):js中没有单元和程序的概念: 作用域: 语法作用域与变量作用域的区别:前 ...
 
随机推荐
- 汉诺塔问题II(模拟)
			
汉诺塔问题II Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1556 Solved: 720 Description 汉诺塔(又称河内塔)问题是源于 ...
 - Constructing Roads (MST)
			
Constructing Roads Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...
 - 以DDD为开发模式的设计开发步骤可以是
			
以DDD为开发模式的设计开发步骤可以是:1)分析需求:2)画出用例图,系统中各个角色如何使用系统,也包括外部系统如何使用系统,也包括系统中到某个时间点自动启动的某些功能(此时角色就是时间):3)针对各 ...
 - java类的加载过程
			
1.类的加载顺序 (1)JVM在首次加载类时会对 静态初始化块.静态成员变量. 静态方法进行一次初始化. (2)只有在调用new方法时才会创建类的实例. (3)对象创建过程: 首先执行父类(如果有) ...
 - java笔记--关于线程通信
			
关于线程通信 使用多线程编程的一个重要原因就是线程间通信的代价比较小 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3897773.h ...
 - [Effective JavaScript 笔记] 第11条:熟练掌握闭包
			
理解闭包三个基本的事实 第一个事实:js允许你引用在当前函数以外定义的变量. function makeSandwich(){ var magicIngredient=”peanut butter”; ...
 - Linux下的网络管理工具—OpenNMS
			
导读 OpenNMS的是一个运营商级别的,高度集成的,开放源码的平台,用于构建网络监控解决方案.OpenNMS有两个发行版:Meridian and Horizon.使用Meridian是可取的,对企 ...
 - Unity3D研究之Prefab里面的Prefab关联问题
			
Unity研究院之Prefab和GameObject的正向和逆向查找引用 我发现很多美工兄弟都爱问程序Unity3d为什么总丢材质? 我不排除U3d有BUG的情况下会丢材质?但是其实很多时候是人为操作 ...
 - ios 应用程序图标、启动画面、itune图标设置
			
http://blog.sina.com.cn/s/blog_4cd8dd1301014hfz.html 先说说应用程序图标,一般有下面几种: Icon.png(57x57) - Homescreen ...
 - less,sass,stylus配置和应用教程及三者比较
			
less,sass,stylus配置和应用教程及三者比较 Less 1. 定义: Less是CSS预处理语言,在css基础之上增加了诸如变量,混合(mix),继承,运算,函数等功能,LESS既可以运 ...