#JavaScript数据类型
##一、原始数据类型
Javascript一共有 5种原始类型:Undefined、Null、Boolean、Number、String.
*typeof运算符:判断其后面跟的参数是何种原始类型
e.g.typeof true--返回boolean
注意:typeof null--返回的是object,原因是null是对象的占位符,表示尚未存在的对象,即知道要找的对象是什么,但是并未找到该对象.
1.Undefined类型
* 此类型只有一个值:undefined.
* 声明的变量未初始化,变量的默认值是undefined
* 函数没有返回值或者没有明确的返回值时,调用结果为undefined
2.Null类型
* 此类型也只有一个值:null.
* 值null和值undifined相等 `alert(null==undefined);`//返回true
* 但是 `alert(null===undefined);`//返回false,值相等,但含义不同,null表示知道要找的对象是什么,但是并未找到该对象.
**延伸:可以利用null或undifined来判断页面上是否存在某对象
`if(null)/if(undefined){docunment.write("true");}else{docunment.write("false"}`
null和undefined返回的值均为false,若要判断某元素a是否初始化, `var a;if(a){docunment.write("true");}else{docunment.write("false"}`如果返回为false,表示未初始化.
另外还有一个方法`var a;var b=a||9;document.write(b);`,如果返回的是9,即表示a未初始化,但是需要排除也可能a的值和9相等的情况.
3.Boolean类型
* 此类型有2个值:true和false
4.Number类型
* js中最特殊的类型,既可以表示32位的整数,也可以表示64位的浮点数.
* 特殊的 Number 值
* Number值集合的外边界:Number.MAX_VALUE和Number.MIN_VALUE.
* Number.POSITIVE_INFINITY的值为无穷大Infinity
* Number.NEGATIVE_INFINITY的值为-Infinity
* 判断一个数是否是有穷的,可以对任何数调用isFinite() 方法,以确保该数不是无穷大。`if(isFinite(a)){alert("finite")else{alert("infinite")}`
* NaN表示非数,这种情况发生在类型(String、Boolean 等)转换失败时,NaN与自身不相等`alert(NaN==NaN)`返回的是false.
* NaN属于Number类型 typeof NaN --返回的是number
* isNaN()函数:检查其参数是否是非数字值
是数字或者能转换成数字,返回false,否则返回true
**编写函数,输入1+1,得出2
5.string类型
* 字符串字面量是由双引号(")或单引号(')声明的
##二、数据制类型转换
- parseInt() :把值转换成整数
* parseInt("blue")--返回NaN;
* parseInt("123")---返回123;
* parseInt("12.3")--返回12,去除小数部分
- parseFloat() :把值转换成浮点数
- 字符串必须以十进制形式表示浮点数,而不是用八进制或十六进制
* parseFloat("blue")--返回NaN;
* parseFloat("1.23")--返回1.23;
* parseFloat("1")--返回1,自动去除.0;
* parseFloat("01")--返回1,自动去除.0;
- toString():将数字转换成字符串
- 强制类型转换
* Boolean(value):把对应值转换成Boolean型;
* Number(value):把对应值转换成数字(整数浮点都可以);转换的是整个值,而不是部分值
* String(value):把对应值转换成字符串
##三、引用数据类型--对象
1.Array类(Array对象):创建一个数组
* 创建方法
* `var arr = new Array();`
* `var arr = new Array(10);`
* `var arr = new Array(1,2,3);`
* `var arr = new Array[1,2,3];`--常用方式
* 操作Array的方法
* shift方法:删除数组中的第一个元素并返回该元素,语法为arr.shift();数组长度length-1
* pop方法:删除数组中的最后一个元素并返回该元素,语法为arr.pop();数组长度length-1
* unshift方法:将指定的元素插入数组最前面并返回数组的新长度值。语法为arr.unshift();数组长度length+1(不管插入的是单个数字还是数组)
* push方法:将新元素添加到一个数组的最后面,并返回数组的新长度值。语法为arr.push();数组长度length+1(不管插入的是单个数字还是数组)
* concat 方法:将两个或更多数组组合起来,返回一个新数组.语法为arr.concat();从源数组**复制**元素到结果数组,源数组长度值不变
* splice 方法:从一个数组中移除一个或多个元素,如果必要,在所移除元素的位置上插入新元素,返回所移除的元素。语法为arr.splice(开始删除的Index,删除的个数,插入的元素或数组);数组长度length-删除的个数+插入的元素/数组个数
* reverse 方法:将数组中的元素反序并返回该数组。语法为arr.reverse();
* slice方法:slice(start,[end]):返回从原数组中指定开始下标到结束下标之间的项组成的新数组,源数组长度/值不变,slice 方法一直**复制**到 end 所指定的元素,但是不包括该元素.
- shift()和pop():返回的是被删除的元素,数组长度/值改变;
- splice():返回的也是被删除的元素,插入的元素直接显示在数组中,数组长度/值改变;
- unshift()和push():返回的是数组的新长度值,数组长度/值改变;
- concat()和slice():返回的是新数组,源数组的长度/值不变;
- reverse:返回的是反序后的数组,数组的值反序,长度不变.
2.String类(String对象):用于处理或格式化文本字符串以及确定和定位字符串中的子字符串。
* 操作String的方法 var str="abcdef"
* charCodeAt方法:返回一个整数,代表指定位置上字符的 Unicode 编码。语法为str.charCodeAt(index);如果指定index处没有字符,将返回NaN。
* charAt 方法:返回指定索引位置处的字符。语法为str.charAt(index);出有效范围的索引值返回空字符串.
* slice 方法:返回字符串中从指定index到结束index之间的字符串的片段。。语法为str.slice(start,[end]);使用的是**复制**,源字符串的长度/值不变.
* substring 方法:返回位于String中指定位置的子字符串。 语法为str.substring(start,[end]);使用 start和end两者中的较小值作为子字符串的起始点,子字符串的长度等于 start 和 end 之差的绝对值.
* indexOf 方法:返回 String 对象内第一次出现子字符串的字符位置。 语法为str.indexOf("子字符串",开始查找的index);查不到--返回-1;
* lastIndexOf 方法:返回 String 对象中子字符串最后出现的位置。语法为str.lastIndexOf("子字符串",开始查找的index);从右向左执行查找,查不到--返回-1;
* concat 方法:返回字符串值,该值包含了两个或更多个提供的字符串的连接。
3.Global类:是一个固有对象,目的是把所有全局方法集中在一个对象中
编码传递给浏览器的URI:
* encodeURI 方法:将文本字符串编码为一个有效的统一资源标识符 (URI)。语法为encodeURI(uril);处理完整的URI,不对URI中的特殊字符进行编码,如: // ?
* encodeURIComponent():对所有的字符编码,包括特殊字符
* decodeURI():只对用encodeURI()替换的字符解码
* decodeURIComponent 方法:解码所有encodeURIComponent()编码过的字符
4.Date类:启用基本存储器并取得日期和时间
`var now=new Date();`显示的是当前的时间--Sat Aug 29 2015 17:08:37 GMT+0800 (中国标准时间)
获取年份`now.getFullYear();`
获取月份`now.getMonth()+1;`
获取日期`now.getDate();`
获取星期`now.getDay();`
获取小时`now.getHours();`
获取分钟数`now.getMinutes();`
获取秒数`now.getSeconds();`
5.Math类:是一个固有对象,提供基本数学函数和常数
* ceil方法:返回大于等于其数字参数的最小整数。语法Math.ceil(number);--往上取整`Math.ceil(13.1)`--返回14
* floor方法:返回小于等于其数值参数的最大整数。 语法Math.ceil(number);--往下取整`Math.ceil(13.8)`--返回13
* round 方法:返回与给出的数值表达式最接近的整数。语法Math.ceil(number);--四舍五入`Math.ceil(13.1)`--返回13,`Math.ceil(13.8)`--返回14
* random 方法:返回介于 0 和 1 之间的伪随机数。语法Math.random();
* 获取0-200之间的随机整数:`Math.round(Math.randon()*200);`
6.instanceif运算符:返回一个 Boolean 值,指出对象是否是特定类的一个实例。
* 与typeof运算符的区别在于它要求被判断的对象必须是已经定义的对象
* 在typeof返回值为object时,比较有用.
* result = object instanceof class,如果 object是class的一个实例,则instanceof 运算符返回 true。如果object不是指定类的一个实例,或者 object 是 null,则返回 false。