JS 基础 —— JavaScript数据类型与对象 一、JavaScript 五种基本数据类型 五种基本数据类型:Undefined、Null、Boolean、Number、String。除上五种基本数据类型外,JavaScript还有引用类型(即 class类型),包含上述基本类型的对象表示与Date类型、Math类型、Regex类型等。 首先介绍一个运算符:typeof。对变量或值调用typeof将返回对应的该变量或值的类型: undefined - 如果变量是 Undefined 类型的 boolean - 如果变量是 Boolean 类型的 number - 如果变量是 Number 类型的 string - 如果变量是 String 类型的 object - 如果变量是一种引用类型或 Null 类型的。如:var a=new Array(); 则typeof a将返回object。 1、Undefined 只声明但未定义的类型:var a; //a的值与类型都为undefined 说明:未声明的变量也是undefined类型。还应注意JavaScript中变量声明可以省略var: var a;//值与类型都为undefined var b=10;//值为10,类型为Number c="asdfkl";//省略声明关键字var,值为asdfk,类型为String alert(typeof d);//将提示undefined 由此得出,变量已经初始化,则类型确定,否则为undefined,相当于由值判断类型。 2、Null 可理解为一个值,即可使用null对变量或对象赋值,以清空该变量或对象(即释放该对象引用关联的对象空间)。但"typeof 值为null的变量或对象" 将返回类型为Object,无论初始化是该变量是什么类型。 如:var s="hello";//则s为String基本数据类型,但执行s=null后,typeof s将返回Object。 3、Boolean 基本类型: var b=true; 对应引用类型: var B=new Boolean();//构造器无参时括号可省略,故可写成var B=new Boolean;无参时默认为false,与java一致。 4、Number 基本类型: var n=21.5; var n2=21; var n3=2.1e2; var n4=0x15; 对应引用类型: var N=new Number();//同样可选择是否指定初始值 5、String 基本类型: var s="sskklg"; 对应引用类型: var S=new String();//同上 二、基本类型与对应引用类型的关系 基本类型是变量,而对应的引用类型是对象(Object类型),虽然声明方式都是以var开始。初始化方式不同,基本类型以值,引用类型以new Constructor()的形式。(重点,其实js没有严格的基本类型与其对应的对象之分,基本类型也可调用对应对象的方法) 三、JavaScript 对象 1、Boolean对象 var B=new Boolean(); var B=new Boolean(true); 属性: constructor :返回对创建此对象的Boolean函数的引用,即返回最初的构造器地址。 prototype :动态向对象添加属性或方法。 方法: toSource() :返回该对象的源代码。 toString() :将值返回为字符串。 valueOf() :返回boolean对象的原始值,即返回对应的基本数据类型值,返回类型为Boolean类型。 2、Number对象 var N=new Number(); var N=new Number(125.02); 属性: 共有: 基本的constructor 与prototype属性; 特有: MAX_VALUE :类变量,值为JavaScript中可表示的最大的数。 MIN_VALUE :类变量,值为JavaScript中可表示的最小的数。 NaN :非数字值。 NEGATIVE_INFINITY :类变量,负无穷大,值为-infinity,溢出时(小于Number.MIN_VALUE)返回该值。 POSITIVE_INFINITY :类变量,正无穷大,值为infinity,溢出时(大于Number.MAX_VALUE)返回该值。 说明:可用isFinite(var)全局函数判断数字var是否无穷大。同样可用isNaN(var)判断变量var是否为数值类型,isNaN("1")将返回false。 方法: 共有: toString(); valueOf(); 特有: toLocaleString() :数字转换为字符串,使用本地数字格式顺序。 toFixed(numb) :把数字转换为字符串,结果的小数点后指定numb(0-20的整数)位数的数字。 toExponential(numb):把对象的值转换为指数计数法字符串。numb为小数位数。 toPrecision(numb) :把数字格式化为指数计数法字符串。此处numb为指数计数法的最小位数,如numb为4,则数值1将表示为1.0000e+0。 数字的toString方法可以指定基的大小(默认为10),如: var iNum = 10; alert(iNum.toString(2)); //输出 "1010" alert(iNum.toString(8)); //输出 "12" alert(iNum.toString(16)); //输出 "A" 3、String对象 var S=new String; var S=new String("zifuchuan"); 属性: 基本的constructor 与prototype属性; length :字符串长度。如"abc"长度为3. 方法: http://www.w3school.com.cn/jsref/jsref_obj_string.asp 4、Array对象 var a=new Array; var a=new Array(3);//指定长度为3 var a=new Array(value0,value1...);//使用参数列表创建 属性: 与String对象完全一样。 方法: http://www.w3school.com.cn/jsref/jsref_obj_array.asp 5、Date对象 var d=new Date(); 属性: 仅基本的constructor与prototype两个。 方法: http://www.w3school.com.cn/jsref/jsref_obj_date.asp 常用几个:全年、月、日、星期(Day)、时、分、秒、毫秒。 getDate()/setDate(day):返回/设置时间对象的月中的某一天(1-31,若对9月(小)设置为31,则自动变为10月1日)。 getDay()/setDay(number):返回/设置星期数(0-6,对应星期日-星期六)。 getMonth()/setMonth(mon):返回/设置月份(mon取0-11)。 getFullYear()/setFullYear(year) :返回/设置四位数的年份。 getHours()/setHours(h):小时。0-23。 getMinutes()/setMinutes(m):分钟。 getSeconds()/setSeconds(s):秒。0-59。 getMilliSeconds()/setMilliSeconds(ms):返回/设置毫秒。0-999。 getTime()/setTime(ms):返回/设置距1970.01.01日的毫秒数。setTime(ms)返回ms。 上述返回/设置的都是本地时间,如需世界时间,除getTime与setTime外,方法名与上述名只相差UTC(世界统一时间),如getDate对应方法名为getUTCDate。 获取对应字符串方法: toString()/toUTCString()/toLocalString():有细微的差别。 toTimeString()/toLocalTimeString():上一方法的时间部分(时分秒)。 toDateString()/toLocalDateString():日期部分(年月日)。 UTC():静态方法,返回距离1970.01.01的毫秒数。参数较多,应该很少用。Date.UTC(...)。 valueOf():无参,返回当前日期对象距1970.01.01的毫秒数。 6、Math对象 Math对象不用创建,因为只包含静态变量与方法供调用: http://www.w3school.com.cn/jsref/jsref_obj_math.asp 四、js 各种对象的toString 方法的说明 1、Array 对象 返回值与没有参数的 join() 方法返回的字符串相同(即默认以逗号分隔)。如: var arr = new Array(3) arr[0] = "George" arr[1] = "John" arr[2] = "Thomas" document.write(arr.toString()) //结果为:George,John,Thomas 2、Boolean 对象 toString 方法不是返回0或1或-1,而是"true" 或"false"字符串。 3、Number 对象 toString 方法可指定参数(作为转换的基,仅Number 对象具有此方法,其它对象调用时将出现TypeError)。 4、String 对象 toString 方法返回原始字符串,即相当于valueOf,但一般不怎么使用。 5、Date 对象 toString 返回时间的字符串。如: var d = new Date() document.write (d.toString()) //结果为:Thu Oct 05 2017 15:52:18 GMT+0800 五、字符串转回原来类型 1、转回 Array 对象:split 方法 var str = "one two three"; alert(typeof str);//提示string var array = str.split(" "); alert(typeof array);//提示object alert(array.join());//提示:one,two,three 2、转回Boolean 对象:好像没有直接方法。 3、转回Number 对象:parInt/parseFloat parseInt 只返回整数部分,parseFloat 返回值包括小数部分(如果有的话)。parseFloat 转换时如遇无效字符,将只转换无效字符之前的部分: var str; str = "1"; alert(parseFloat(str));//1 str = "1.0"; alert(parseFloat(str));//1 str = "1.1"; alert(parseFloat(str));//1.1 str = "1.11a"; alert(parseFloat(str));//1.11 str = "a1"; alert(parseFloat(str));//NaN 4、转回Date 对象:先转回Number 类型,再new Date 理解: 第1点中,字面量字符串变量也可直接调用String 对象的方法,其它几种基本类型也是如此,所以可理解为js没有严格的基本类型,它们只是对应对象的另一种初始化方式。 var bVar = true; alert(typeof bVar + bVar.toString() + bVar.valueOf());//提示:booleantruetrue var nVar = 10; alert(typeof nVar + nVar.toString() + nVar.valueOf());//提示:number1010 var str = "one two three"; alert(typeof str);//提示string alert(typeof str.split(" "));//提示object alert(str.split(" ").join());//提示:one,two,three 六、JS 类型强制转换 JS 可强制转换为3个对象类型的3个方法: 1、Boolean() 函数: 当要转换的值是至少有一个字符的字符串、非 0 数字或对象时,Boolean() 函数将返回 true。如果该值是空字符串、数字 0、undefined 或 null,它将返回 false。 2、Number() 函数: Number() 函数的强制类型转换与 parseInt() 和 parseFloat() 方法的处理方式相似,只是它转换的是整个值,而不是部分值。 还记得吗,parseInt() 和 parseFloat() 方法只转换第一个无效字符之前的字符串,因此 "1.2.3" 将分别被转换为 "1" 和 "1.2"。 用 Number() 进行强制类型转换,"1.2.3" 将返回 NaN,因为整个字符串值不能转换成数字。如果字符串值能被完整地转换,Number() 将判断是调用 parseInt() 方法还是 parseFloat() 方法。 参数为null 结果为0,参数为undefined 结果为NaN,参数为对象或无效数字字符串结果为NaN。 3、String() 函数: 最后一种强制类型转换方法 String() 是最简单的,因为它可把任何值转换成字符串。 要执行这种强制类型转换,只需要调用作为参数传递进来的值的 toString() 方法,即把 12 转换成 "12",把 true 转换成 "true",把 false 转换成 "false",以此类推。 强制转换成字符串和调用 toString() 方法的唯一不同之处在于,对 null 和 undefined 值强制类型转换可以生成字符串而不引发错误: var s1 = String(null);//强制转换,不会出错,结果为"null"字符串 var oNull = null; var s2 = oNull.toString(); //会引发错误