题记

“采用UTF-16编码的Unicode字符集,JavaScript字符串是由一组无符号的16位值组成的序列”,并且验证了特殊字符的处理。今天工作中就遇到一个问题:input的maxlength问题。在之前的概念中,汉字都是占用两个字符的,所以公司的checkForm.js中针对汉字处理时,把汉字当作两个字符,导致根据maxlength的值验证表单数据时提示信息与实际输入不符。知道问题所在,修正起来也方便多了。

原始表达式

原始表达式是表达式的最小单位,包含常量或直接量、关键字和变量。

对象和数组的初始化表达式

对象和数组初始化表达式实际上是一个新创建的对象和数组。这些初始化表达式有时称作“对象直接量”和“数组直接量”,它们不是原始表达式。

数组初始化表达式是通过一对方括号和其内由逗号隔开的列表构成。数组直接量中的列表逗号之间的元素可以省略,此时空位会填充undefined,结尾处可以保留单个逗号,这时并不会创建一个新的undefined元素。

对象初始化表达式由一对花括号和有逗号隔开的属性构成,每个属性都好汉一个属性名和一个冒号作为前缀。

属性访问表达式

属性访问表达式运算得到一个对象属性或一个数组元素的值。JavaScript为属性访问定义了两种语法:

expression . Identifier

expression [ expression ]

第一种写法是一个表达式后跟一个句点和标识符,表达式指定对象,标识符指定需要访问的属性的名称。第二种写法是使用方括号,方括号内是另外一个表达式,第二个表达式指定要访问的属性的名称或代表要访问数组元素的索引。

不管使用哪种形式的属性访问表达式,在“.”和“[”之前的表达式总会首先计算,如果计算结果是null或者undefined,表达式会抛出一个错误异常,因为这两个值都不能包含任意属性。

显然.identifier的写法更加简单,但需要注意的是,这种方式只适用于要访问的属性名师合法的标识符,并且需要知道要访问的属性的名字。如果属性名是一个保留字或者包含空格和标点符号,或者一个数字(数字),则必须使用方括号的写法。当属性名是通过运算得出而不是固定的值的时候,这时候必须使用方括号写法。

var o = {x:1,y:{“delete”:3}};

alert(o[“y”][“delete”]); //3

调用表达式

JavaScript中的调用表达式是一种调用(或执行)函数或方法的语法表示。它以一个函数表达式开始,这个函数表达式指代了要调用的函数。函数表达式后跟随一个圆括号,括号内是一个以逗号隔开的参数列表,参数剋有0个也可以有多个。

对象创建表达式

对象创建表达式创建一个对象并调用一个函数(构造函数)初始化新对象的属性。对象创建表达式和函数调用表达式非常类似,只是对象创建表达式多了一个关键字new:

new Object()

new Point(2,4)

如果一个对象创建表达式不需要传入任何参数给构造函数的话,那么这对空园括号是可以省略掉的:

New Object

New Date

运算符概述

大多数运算符都是由标点符号表示,如“+”和“=”。而另外一些运算符则是由关键字表示的,比如delete和instanceof。关键字运算符和标点符号所表示的运算符都是正规的运算符,他们的语法都非常言简意赅。

算数运算符

  • “+”运算符

二元加法运算符可以对两个数字做加法,也可以做字符串连接操作:

1 + 2 = 3 ;

“1” + “2” = “12”;

当两个操作数都是数字或都是字符串的时候,计算结果是显而易见的。然而对于其他情况来说,则需要进行一些必要的类型转换,并且运算符的行为依赖于类型转换的结果。加号的转换规则优先考虑字符串连接,如果其中一个操作数是字符串或者转换为字符串对象,另外一个操作数将会转换为字符串,加法将进行字符串的连接操作。如果两个操作数都是类字符串的,那么将进行算数加法运算。

  • 一元算数运算符

一元运算符作用于一个单独的操作数,并产生一个新值。在JavaScript中,一元运算符具有很高的优先级,而且都是右结合。需要注意的是,“+”和“-”是一元运算符,也是二元运算符。

  • 位运算符

位运算符可以对数字表示的二进制数进行更低层级的按位运算。位运算符要求它的操作数都是整数,这些整数表示为32位整型而不是64为浮点数。必要时,位运算符首先将操作数转换为数字,并将数字强制表示为32位整型,这会忽略原格式中的小数部分和任何超过32为的二进制位。需要注意的是,位运算符将NaN,Infinity和-Infinity都转换为0。


发表评论