首页 > 技术文章 > python --- js数据类型及对象

zxf123 2017-12-23 23:04 原文

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();	//会引发错误

  

推荐阅读