数据类型
Undefined/Null/Boolean/Number/String五种简单数据类型。
使用typeof操作符可以返回变量或操作数的类型说明字符串:
字符串 | 含义 |
---|---|
undefined | 值未定义 |
boolean | 值是布尔值 |
string | 值是字符串 |
number | 值是数值 |
object | 值是对象或null |
function | 值是函数 |
Undefined类型(只有一个值undefined)
使用var声明变量但未初始化时此变量的值就是undefined。
Null类型(只有一个值null)
null值表示一个空对象指针,故使用typeof检测是返回object。
一般声明变量用于保存对象时初始化为null,另外,null == underfined的操作返回true。
Boolean类型(true和false)
存在函数Boolean(变量名),转换规则:
数据类型 | 转为true | 转为false |
---|---|---|
String | 任何非空字符串 | 空字符串 |
Number | 任何非零数字值 | 0和NaN |
Object | 任何对象 | null |
Undefined | not applicable(n/a) | undefined |
Boolean | true | false |
Number类型(整数和浮点数)
十进制
八进制第一位为0,然后是0-7,超出范围则当十进制。严格模式下八进制无效
十六进制以0x开头
- 不要以浮点数运算结果作为判断条件,因为计算精度存在误差
- 内存限制,存在数值范围,超出范围则为Infinity或-Infinity,即正负无穷。
- NaN:任何数值除以0返回NaN,NaN不等于任何值,不等于自身。isNaN(变量名)不能转换为数值则为真。
- 数值转换函数:Number(变量)/parseInt(变量,可选用于指定进制基数)/parseFloat(变量)分别有具体的转换规则。
String类型
toString()方法。
Object类型
Object的每个实例对象存在的属性和方法:
Constructor | 保存着用于创建当前对象的函数。 |
hasOwnProperty(propertyName) | 检查给定的属性在当前实例对象中是否存在 |
isPrototyOf(object) | 检查传入的对象是否是另一个对象的原型 |
propertyIsEnumerable(propertyName) | 检查给定的属性是否能够作为for-in语句来枚举 |
toLocaleString() | 返回对象的字符串表示,该字符串与执行环境的地区对应 |
toString() | 返回对象的字符串表示 |
valueOf() | 返回对象的字符串、数值或布尔值 |
操作符
一元操作符(只操作一个值)
- 递增和递减,其实和c一样吧
- 一元加和减 ,用于算术运算或转换数据类型
- 位操作符:按位非(操作数的复值减一)~、按位与&、按位或|、按位异或^、左移<<、有符号的右移>>(保留符号位)、无符号的右移>>>
- 布尔操作符:逻辑非、逻辑与、逻辑或
例如逻辑非对应的规则 | 结果 |
---|---|
alert(!false) | false |
alert(!"string") | false |
alert(!"") | true |
alert(!0) | true |
alert(!123456) | false |
alert(!NaN) | true |
- 乘性操作符:加减乘除
- 关系操作符
- 相等操作符
- 条件操作符
- 赋值操作符
- 逗号操作符
(以上这些操作符一般都有对应的规则)
语句
- if语句
- do-while语句:循环体中语句至少被执行一次
- while语句
- for语句
- for-in语句 可以用来枚举对象的属性等
//枚举BOM中window对象的所有属性
for(var propName in window){
document.write(propName);
}
//最后先确认被循环的对象值不是null或undefined。
-
label语句
这个是可以在代码中添加标签,一遍将来使用的样子。
//eg://标签由break或continue引用
start:for(var i=0;i<count;i++){alert(i)}
- break和continue语句
- with语句 将代码的作用域设置到一个特定的对象中。大量使用会导致性能下降。严格模式下不允许使用。
- switch语句 特色是switch可以是任何数据类型:字符串、对象等,case甚至可以是变量或表达式。比较值时使用的是全等操作符,因此不会有类型转换。
函数
function关键字
不必定义是否返回值
return可以不烦会任何值,自动返回undefined
严格模式有关键字限制
命名参数只提供便利,不是必须。因为以数组的形式传递,可以用arguments对象像数组一般访问。类似重载,但ECMAscript没有重载啊。
没传递值的命名参数自动赋予undefined
严格模式对arguments对象有限制,例如设置了arguments[1]=10,对应位置的命名参数没有被传值的话还是undefined。
同名后定义的函数覆盖先定义的函数啊,没法重载。
网友评论