2017-06-24 更新 北京连续三天下雨啦
乘性操作符
1.ECMA中定义了三种操作符,乘法 除法 和求模 并与其他语言相应操作符相同,再计算之前如果不是数值,会先去调用number()方法转换,空字符转换为0 true转换为1
2.凡是与NaN计算的结果都为NaN,计算结果超过数值范围会显示Infinity或者-infinity 无穷数与0相乘结果为NaN 非0相乘结果为 正无穷或者是负无穷
3.NaN属于特殊数值alert(NaN==NaN)//false ECMA还特意定义了一个函数来判断,isNaN 函数 注意:这个函数返回true或者是false 但是进入函数得数值都会先被调用valueof()方法判断是否可以转换为NaN然后返回 true或者false
4.数值转换(Number()方法为例)
① 按照惯例,如果是Boolean 类型转换为 1 或者 0 ,数字只是简单得返回并无转换
② 若是Null值 则返回 0 ,而undefined 返回NaN
③ 若是字符串则有以下几种 :1. 字符串数字返回 数字类型 但是会忽略前导0 比如 011 转换为11 ,小数会返回有效得浮点格式 如1.1等同样忽略前导0 2.如果字符串包含有效16进制格式 则返回大小相同得十进制数值 如果是空字符 则返回 0 如果字符串除上述格式之外则返回NaN ,也就是说纯字符串且非数字字符串会返回NaN
④ 如果是对象 则调用valueOf() 方法然后按照上面规则返回数值, 如果转换结果是NaN 则调用tostring方法 按照前面规则再次返回
5.parseInt()按照上述规则总体相同但是也有部分区别 例如转换“123blue” 结果会是123 ,而空字符返回结果会是NaN “0xf”会被转换为16进制数值15 ,这里有个坑需要点名一下例如“070”在ECMA3规则中呗转换成 56 而在ECMA5得时候这个BUG被修复 为十进制 70 (实际上这个并非BUG)而是在ECMA5得时候parseInt方法被扩展 可以接收两个参数除了必须参数之外还包含了可选得进制数值 如 :parseInt(“AF”,16)//175 如果不写转换进制 则返回NaN
6.parseFloat()秉承parseInt函数特性,当遇到整数时返回整数遇到多位小数点例如 22.22.34 会找到第一个小数点忽略后面数值返回22.22 当然遇到前导0得时候一样会忽略前导0
7.String 类型标识由0或者多个Unicode组成得字符序列 该字符串可以由双引号与单引号表示,双引号与单引号并不明显区别!但是一定要成对出现,有关字符串转义序列这里就不多说啦,详情见 33页,这里需要说明一下字符串得特点,当字符串声明之后再次进行操作得时候原字符串就会被销毁,例如 var s=“222”; s+=s+“t”;这里得s已经被重新填充而并非在原有基础伤修改,这里不同于C#中字符串定义,哪里定义变量后该变量指向堆中得值而实际上 变量中只存了该数值在堆中得索引并非实际值,原有变量被操作之后该变量指向另外得索引而原值并未改变,当然这里会牵扯到回收机制,稍后介绍。
8. toString() 该方法几乎每个值都有这个方法,除了null 和 undefined,该方法介于值如果有这个方法就调用该值得tostring方法如果没有就返回相应结果,例如结果为null 则返回“null”
9.object 类型 在ECMA中这种类型属于数据与功能得集合,可以使用new操作符来创建新对象类型 ,object类型时所有它实例得基础 换句话说object类型所具有得任何属性方法页同样存在与他的每一个具体对象中,下面是几种基础得属性和方法:
① constructor 保存用于创建对象得函数
② hasOwnProperty(propertyName)用于检查给定属性在当前对象实例中是否存在,注意这里说得是否存在并不是实例原型中,例如 s.hasOwnProperty("name") ,指的是变量s中是否存在name属性,注意这里指的是属性!
③ isPrototypeOf(object) 用于检查传入对象是否是当前对象得原型
④ propertyIsEnumerable(propertyName)用于检查给定得属性是否能使用for-in语句来枚举,与hasOwnporperty()方法一样参数属性名必须是字符串
⑤ tolocalestring() 返回字符串与执行环境地区相对应,稍后会有详细介绍
⑥ tostring() 这个就不多说啦。
⑦ valueof() 返回对象得字符串,布尔或数值表示,一般与tostring()返回结果相同
在这里我是这样理解object类型得 他就像是地心引力一样得存在,他是所有对象得基础是他让一切成为了可能,所以所有对象都具有这些基本属性和方法