数据类型
1.String类型
String类型用于表示由0或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由双引号或单引号表示。
(1)字符字面量
String数据类型包含一些特殊的字符字面量,也叫转义序列,用于表示非打印字符,或者具有其他用途的字符。这些字符字面量如下表所示:
任何字符串的长度都可以通过访问其length属性取得。
(2)字符串的特点
ECMAScript中的字符串是不可变的。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。
(3)转换为字符串
两种方式:toString()方法和转型函数String()。
在不知道要转换的值是不是null或undefined的情况下,可以使用转型函数String(),这个函数能够将任何类型的值转换为字符串。
String()函数遵循下列转换规则:
①如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果。
②如果值是null,则返回“null”。
③如果值是undefined,则返回“undefined”。
2. Object类型
对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。而Object类型的实例并为其添加属性和(或)方法,就可以创建自定义对象。
var o = new Object();
如上述代码,即可创建一个Object类型的对象。
在ECMAScript中,Object类型是所有它的实例的基础。 换句话说,Object类型所具有的任何属性和方法也同样存在更具体的对象中。
Object的每个实例都具有下列属性和方法:
①Constructor:保存着用于创建当前对象的函数。
②hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在市里的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定。
③isPrototypeOf(object):用于检查传入的对象是否是另一个对象的原型。
④propertyIsEnumberable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。与hasOwnProperty(propertyName)一样,作为参数的属性名必须以字符串形式指定。
⑤toLocalString():返回对象的字符串表示,该字符串与执行环境的地区对应。
⑥toString():返回对象的字符串表示。
⑦valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。
操作符
1.一元操作符
只能操作一个值的操作符叫做一元操作符。
(1)递增和递减操作符
前置型和后置型。(++在前,先计算;++在后,后计算)
递增和递减操作符遵循下列规则:
①在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1的操作。——字符串变量变成数值变量。
②在应用与一个不包含有效数字字符的字符串时,将变量的值设置为NaN。——字符串变量变成数值变量。
③在应用与布尔值false/true时,先将其转换为0/1再执行加减1的操作。——布尔值变量变成数值变量。
④在应用于浮点数值时,执行加减1的操作。
⑤在应用与对象是时,先调用对象的valueOf()方法以取得一个可供操作的值。然后应用前面的规则。如果结果是NaN,则在调用toString()方法后再应用前面的规则。——对象变量变成数值变量。
2.一元加和减操作符
一元加操作符以一个+表示,放在数值前面,不会对数值产生任何影响。
但一元减操作符应用于数值时,该值会变成负数。
3.位操作符
按内存中表示数值的位来操作数值。(32位)
对于有符号的整数,32位中的前31位用于表示整数的值。第32位用于表示数值的符号(0正,1负)
在对特殊的NaN和Infinity值应用位操作时,这两个值会被当成0来处理。
①按位非(NOT)用‘~’表示。(直接取反)
②按位与(AND)用‘&’表示。(同一则一,其余为零)
③按位或(OR)用
‘|’表示。(同零则零,其余为一)
④按位异或(XOR)用‘^’表示。(先来取反,接着来或)
⑤左移,用‘<<’表示,这个操作符会将数值的所有为向左移动指定的位数。(向左移位后,右侧多出的空位用零填充。)左移不会影响符号位。
⑥右移,用‘>>’表示,这个操作符会将数值的所有为向右移动指定的位数。(向右移位后,右侧多出的空位用零填充。)右移不会影响符号位。
⑦无符号右移,用‘>>>’表示。正数无符号右移与右移相同。负数无符号右移会把负数的二进制码变成正数的二进制码。
4.布尔操作符
(1)逻辑非(!)
几个特殊情况:
①操作数是一个对象/非空字符串/任意非零数值(包括Infinity),返回false。
②操作数是一个空字符串/数值0/null/undefined,返回true。
(2)逻辑与(&&)
几个特殊情况:
①第一个操作数是对象,返回第二个操作数。
②第二个操作数是对象,只有在第一个操作数的求值结果为true的情况下才会返回该对象。
③两个操作数都是对象,返回第二个操作数。
④有一个操作数是null,返回null。
⑤有一个操作数是NaN,返回NaN。
⑥有一个操作数是undefined,返回undefined。
逻辑与操作属于短路操作,如果第一个操作数能够决定结果,那么不会再对第二个操作数求值。
(3)逻辑或(||)
几个特殊情况:
①第一个操作数是对象,返回第一个操作数。
②第一个操作数求值结果为false,返回第二个操作数。
③两个操作数都是对象,返回第一个操作数。
④两个操作数都是null,返回null。
⑤两个操作数都是NaN,返回NaN。
⑥两个操作数都是undefined,返回undefined。
逻辑或操作属于短路操作,如果第一个操作数求值结果为true,那么不会再对第二个操作数求值。
5.乘性操作符
(1)乘法(*),用于计算两个数字的乘积。
(2)除法(/),执行第二个操作数除第一个操作数的计算。
(3)求模(%),求余数。
6.加性操作符
(1)加法(+),计算两个数字的和。
(2)减法(-),计算两个数字的差。
7.关系操作符
小于(<)、大于(>)、小于等于(<=)和大于等于(>=)。返回布尔值。
8.相等操作符
(1)相等(==)和不相等(!=)
(2)全等(===
)和不全等(!==
)
9.条件操作符
variable = boolean_expression ? true_value :false_value;
10.赋值操作符(=)
11.逗号操作符
用于在一条语句中执行多个操作。
语句
1.if语句
2.do-while语句
3.while语句
4.for语句
5.for-in语句
是一种精准的迭代语句,可以用来枚举对象的属性。(顺序不可预测)若表示要迭代的对象为null或undefined,不报错但也不再循环。
6.label语句
在代码中添加标签。
语法为:
label : statement;
示例:
start : for (var i = 0 ; i < count ; i++){
alert(i);
}
start为标签,可以由break或continue语句引用。
加标签的语句一般都要与for语句等循环语句配合使用。
7.break和continue语句
break语句会立即退出循环,强制继续执行循环后面的语句。
continue语句也立即退出循环,但退出循环后会从循环的顶部继续执行。
break和continue语句都可以和label语句联合使用,返回代码中特定的位置。这种情况多发生在循环嵌套的情况下。
8.with语句
作用是将代码的作用与设置到一个特定的对象中。
语法如下:
with (expression) statement;
示例:
var qs = location.search.substring(1);
var hostName = location.hostname;
var url = location.href;
上面几行代码都包含location对象。 如果使用with语句,可以如下所示:
with(location){
var qs = search.substring(1);
var hostName = hostname;
var url = href;
}
使用with语句关联了location对象。在with语句的代码块内部,每个变量首先被认为是一个局部变量,如果局部环境中找不到该变量的定义,就会查询location对象中是否有同名的属性、如果有,则以location对象属性的值作为变量的值。
严格模式下不允许使用with语句,否则会视为语法错误。
9.switch语句
函数
1.函数执行完return语句之后停止并立即退出。
位于return后的任何代码永远不会执行。
return也可以不带有任何返回值,这种情况下,函数停止执行后返回undefined值。
限制:
不能把函数或参数命名为eval或arguments。
2.理解参数
可以向ECMAScript函数传递任意数量的参数,并且可以通过arguments对象来访问这些参数。
arguments对象与数组类似,可以使用方括号语法访问他的每一个元素,使用length属性来确定传递进来多少个参数。
命名的参数只提供便利,但不是必需的。
3.不能重载
如果定义了两个名字相同的函数,则该名字只属于后定义的函数。
今天学习了JavaScript的数据类型、语法和函数部分,明天也要加油呀!