作为个人笔记整理 没有太大参考价值
ECMAScript 的数据类型;
undefined null string number Boolean // 基本数据类型
Object // 复杂数据类型
typeof null => Object 是因为特殊值null 被认为是一个空的对象引用(空指针对象);
undefined 的值是派生自 null 所以 ECMA-262 规定对等性检测返回值是true
null==undefined //true
注意: undefined 与null 在用法上有很大的不同
- 没有必要把一个变量显式的赋值 undefined 。
但是,只要意在保存对象的变量还没有真正的保存对象,就应该明确的让该变量保存null 值,这样不仅可以体现 null
作为空对象的惯例也有助于区分 undefined ,nullfunction 被认为是 Object 而不是一种数据类型;
- Number 类型
1.整数
可以通过 十进制 八进制 十六进制来表示;
八进制:0开头 后面跟着(0~7)如果数值超出范围 则被认为是十进制;
十六进制:0x开头 后面跟着 (0~9 以及A~F)不区分大小写
进行数学计算时 都会转换成十进制计算;
2. 浮点数
保存的内存空间是整数的两倍 所以 对一些浮点数 ECMAScript 会将其转为整数保存 例如: 1.0;
e表示法 表示的数值等于e前面的数组 乘以 e后面的数值的十次幂
var num=3.125e7;//31250000 =>3.125*10^7;
也可以使用e 表示法来表示极小的值;
0.0000003 // 3e-7
3.数字 的范围
ECMAScript 并不能保存世界上所有范围,因此在 ECMAScript 中
5e-324
表示最小值范围
1.7976931348623157e+380
表示最大值范围;
超出范围的数用 -Infinity(负无穷) 和 Infinity(正无穷) 表示,且不能被计算;
通过 Number.MAX_VALUE 与Number.MIN_VALUE 能分别得到最大值与最小值;
isFinite();函数 能判断是否在可计算的数字范围内;
NaN (Not a Number)
任何涉及到与NaN 的操作 都会返回NaN;
NaN 与任何值都不相等 包括NaN;
isNaN() 方法可以判断传入的参数;只有传入NaN 时 才会返回true;
typeof NaN // “number”数值转换 Numbe();parseInt();parseFloat();
Number() ;可以用于转换任何类型;
Number的规则:
传入 / 传出
null / 0
undefined / NaN
字符串只包含数字 / 十进制转换
字符串包含有效的十六进制(0x)/ 十六进制转换
字符串包含其他非数字字符 / NaN
空字符串 / 0parseInt(),parseFloat();只用于转换 字符串类型;
parseInt() 规则:
传入 / 传出
空字符串 / NaN
只要包含正确的数值的字符串 / 提取数值
parserInt 可以转换 十进制,八进制,以及十六进制
parseInt('070');
上面的例子 在ECMAScript 3 JavaScript 引擎中会被认为时八进制, 在ECMAScript 5 JavaScript 引擎中会被认为时十进制;为解决这一问题 parseInt 提供第二个参数 来指定转换的使用基数(即多少进制)
parseInt('070',8); //56
parseFloat() 规则:
- parseFloat 从第一个字符串的位置开始 解析 直到结束或者遇见第一个无效的浮点数为止,即 只识别一个小数点 0.345.78
转换为0.354; - 只解析十进制的数字,且只有一个参数。
- 会忽略前导0
- parseFloat 从第一个字符串的位置开始 解析 直到结束或者遇见第一个无效的浮点数为止,即 只识别一个小数点 0.345.78
-String类型
由零个或多个Unicode 字符组成的字符序列;
字符串一旦创建 他的值 就不会改变
改变的方式 是首先要销毁原来的字符串再用另一个包含新值的新字符串填充该变量;
这也是低版本浏览器拼接字符串慢的原因。
转换为字符串
三种方法 toSring(), +”” , String()
toString() 的方法
几乎每种数据类型都有一个toString() 的方法,number,Boolean,Object,String(字符串的toString() 方法会返回一个副本),null,undefined 没有 ;
在调用数值的toString() 方法时可以 传递一个参数:输出数的基数,可以输出 二进制,八进制,十六进制或者其他任意有效的进制格式
var num=10;
num.toString()// '10'
numnum.toString(2)// '1010'
num.toString(16)// 'a'
num.toString(8)// '012'
String() 转型函数
这个函数能够将任何类型转换为字符串
String(null)//"null"
String(undefined)//"undefined"
- Object 类型
每一个Object 实例都具有以下的属性和方法
constructor 保存用于创建当前对象的函数
hasOwnProperty 检查给定的属性在当前对象中是否存在
o.hasOwnProperty('name') //必须以字符串形式制定属性名
protertyIsEnumerable 用于检查给定的属性能否用for-in 来枚举
toLoacaleString(),toString(),valueOf()(通常与toString()的返回值相同)
函数
使用function 关键字来声明
- 函数的参数
在定义的函数中只接收两个参数,但当调用时可以传一个或多个甚至不传,因为 ECMAScript 中的参数在内部使用一个数组来表示,函数接收到的始终都是这个数组。从而不关心参数的格式,在函数中使用arguments 来访问这个数组。 - arguments
每次执行doAdd() 函数都会重写第二个参数,因为arguments对象的值会自动反映到对应的命名参数上,修改了angruments[1]也就修改了 num2 但并不是读取两个值会访问相同的命名空间 他们的内存空间时独立的 但值会同步
function doAdd(num1,num2){
arguments[1]=10;
alert(arguments[0]+num2)
}