javascript——对象的概念——函数 2 (内建函数与类型转换)
javascript 有许多内建函数,用于各种操作,以下为常用的内建方法。
1、parseInt(object,int):将输入的 int 进制的值 object 转换为 10 进制的数值;
- object:输入要转换为数字的字符串、数字;
- int:表示 object 表示为 int 进制字符串;没有则如果 object 以 0x 开头,则表示 object 是十六进制数据;否则按十进制处理。
- 当 object 为一个完全可以转换为数字的字符串时,则转换为数字;
- 当 object 前面的部分可以转换为数字,而后面的无法转换为数字,则只转换前面的字符串;
- 当 object 的最开始的部分都无法转换为数字,则返回NaN;
- 即 javascript 将 object 数据从最开始的位置开始转换一直到遇到无法转换的数据停止。
例1:普通字符串转换为数字
1 parseInt(123abc); //报错 2 parseInt(123abc,16); //报错 3 parseInt(123); //123 4 parseInt(123,8); //83 5 parseInt(123,16); //291
上述例子表明在 8 进制、10 进制中无法识别 abc ,所以只转换 123 ,而在16进制中可以识别所以全部转换。
例2:普通数字转换为数字
1 parseInt(123abc); //报错 2 parseInt(123abc,16); //报错 3 parseInt(123); //123 4 parseInt(123,8); //83 5 parseInt(123,16); //291
由此可以看出,输入参数为数字时和字符串完全不一样。为数字时,带有abc等字母,则javascript报错;而对于字符串中的字母即使无法转换也不会报错,而且还会将开始能转换的部分转换。
例3::开头特殊的 string 转换为数字
1 parseInt('010'); //10 2 parseInt('0x10'); //16 3 parseInt('010',8); //8 4 parseInt('0x10',10); //0 5 parseInt('0x10',16); //16
对于 0 开头的字符串,javascript依然将其视为十进制;而对于0x开头的字符串,javascript将其视为16进制的数据,但若显式指定为10、8进制时,由于javascript只识别该进制下的0而无法识别10、8进制下的 x 因此只返回0;
例4:开头特殊的 number 转换为数字
1 parseInt(010); //8 2 parseInt(010,8); //NaN 3 parseInt(010,10); //8 4 parseInt(010,16); //8 5 parseInt(0x10); //16 6 parseInt(0x10,10); //16 7 parseInt(0x10,8); //14 8 parseInt(0x10,16); //22 9 parseInt(0x10,10); //16
对于数字而言,javascript能够识别以0开头的8进制数字和以0x开头的16进制数字,而且根据例子,在实际应用当中要么对开头特殊的数字不要显式指定输入数据的进制,要么不要以特殊开头而指定输入数据的进制。
- 要特别注意,parseInt(object,int)是将不同进制的数据转换为十进制。即最终结果一定是十进制的。
2、parseFloat():与 parseInt()类似
第一个出现的小数点是有效字符。如果有两个小数点,第二个小数点将被看作无效的。parseFloat() 会把这个小数点之前的字符转换成数字。这意味着字符串 "11.22.33" 将被解析成 11.22。使用 parseFloat() 方法的另一不同之处在于,字符串必须以十进制形式表示浮点数,而不是用八进制或十六进制。该方法会忽略前导 0,所以八进制数 0102 将被解析为 102。对于十六进制数 0xA,该方法将返回 0.
3、toString()
Boolean :返回 true、false;
Number 类型的 toString(int)
例:
结果与parseInt()类似,同样告诉我们特殊的开头与显式指定进制最好不要一起使用,否则很容易出错。
4、isNaN(int) 判断参数是否为数字类型的不是数字。
isNaN(NaN); //true
isNaN(1.1); //false
5、eval():将输入字符串当做javascript代码来执行。
例:eval('document.writeln("你好!<br/>")');
eval常用于将服务器端发送来的json文本转换为javascript对象。
格式:evel("("+json+")");
例:
6、alert();该方法会堵塞线程,因此要避免在AJAX中使用该方法。
7、 encodeURIComponent(value)、 encodeURI(value):将客户端的数据编码为ASCII码,以便向服务器端发送数据。因为网络无法发送非ASCII码的数据。
区别:
- encodeURIComponent(value):对整个网址编码;
- encodeURI(value):只对路径、文件名、请求字符串编码。如只对http://i.cnblogs.com/EditPosts.aspx?postid=4045710问号后面的编码。
一般在客户端编码一次,数据到达服务器端后会自动解码一次。如:
例1:encodeURI('http://i.cnblogs.com/EditPosts.aspx?postid=4045710');
//"http://i.cnblogs.com/EditPosts.aspx?postid=4045710"
例2:encodeURI('http://i.cnblogs.com/EditPosts.aspx?name=小强');
//"http://i.cnblogs.com/EditPosts.aspx?name=%E5%B0%8F%E5%BC%BA"
如上,javascript只对中文等非 ASCII 的数据编码。到达服务器端后服务器自动解码一次,因此在服务器端只需 request.getParameter("name");即可获取数据。
- encodeURIComponent(value)、 encodeURI(value)使用的是 UTF-8 编码规则来编的。当服务器端解码规则不是 UTF-8 就会得到乱码出错。因此可以采用编码两次的方式避免这种错误。
如下:
编码两次也就是意味着解码两次。第一遍编码,因为第一遍编码,你的参数内容便不带有中文等多字节字符了,成了纯粹的 Ascii 字符串,然后在编码一次,到达服务器端后,服务器会自动解码一次,而这次自动的解码不管是按 GBK 还是 UTF-8 还是 ISO-8859-1 都好,都能够正确的由第二次编码得到的数据解码为第一次编码得到的数据。再进行第二次解码(此次是你的第一次解码,因为上一个解码是服务器自动解码的),此次解码按照 UTF-8 解码即可。
亦或者直接指定服务器端的解码规则为 UTF-8,这样就只需要在客户端编码一次了。
8、decodeURI(value)、decodeURIComponent(value):用于解码,同样采用 UTF-8 规则。
9 、强制类型转换
ECMAScript 中可用的 3 种强制类型转换如下:
- Boolean(value):把给定的值转换成 Boolean 型;
- Number(value): 把给定的值转换成数字(可以是整数或浮点数);
- String(value): 把给定的值转换成字符串;
(1)、Boolean(value)
以下内容将强制转换为false:
空字符串'';null;undefined;数字0;NaN;false;
对于其他的内容将返回 true
(2)、Number(value)
Number() 函数的强制类型转换与 parseInt() 和 parseFloat() 方法的处理方式相似,只是它转换的是整个值,而不是部分值。parseInt() 和 parseFloat() 方法只转换第一个无效字符之前的字符串,因此 "1.2.3" 将分别被转换为 "1" 和 "1.2"。而用 Number() 进行强制类型转换,要么全部转换,要么直接返回NaN。
(3)、String(value)
可把任何值转换成字符串。要执行这种强制类型转换,只需要调用作为参数传递进来的值的 toString() 方法.
10、字符串转换的小技巧
- 将内容为数字的字符串转换为数字:直接与1相乘。
例:
- 将其他类型转换为字符串类型:与空字符串''相连
例: