ECMAScript原始类型(续)

原始类型

今天先补充一下昨天剩下的知识点:Number的尾声部分:数值转换
上个博文讲到parseInt()进行数值转换。
如果第一个字符是数值字符,parseInt也能识别出各种整数格式。也就是说,如果字符以"0x"开头且后头是数字字符,就会当做一个十六进制整数;如果以0开头,就当做八进制整数。

var num1 = parseInt("1234ddd");//1234
var num2=parseInt("");//NaN
var num3=parseInt("0xA");//10(十六进制数)
var num4 =parseInt(22.5);//22
var num5 = parseInt(070);//56(八进制数)
var num6 = parseInt("70");//70(十进制)
var num7= parseInt("0xf");//15(十六进制)

您知道吗?

问题::
在使用parseInt()解析八进制字面量的字符串时,ECMAScript3和5产生分歧
。如下:

var num5 = parseInt(""070);//56(八进制数)
//ECMAScript3认为是56(八进制),ECMAScript5认为是70(十进制)

ECMAScript 3 JavaScript的引擎中,"070"会被当做八进制解析。
而在ECMAScript 5中parseInt()已经不具备解析八进制的能力,因此前导0无效,从而数值变成了70。ECMAScript5中在非严格模式下依然如此。

为了消除上述的问题,已经给parseInt提供了第二个参数:即转换时使用的基数(多少进制)。如果知道要解析的值是十六进制,就会按照十六进制解析。

Var num=parseInt("0xAF",16);//175
//如果指定了基数,那么数值前面的0x就可以省略了。、
var num2 = parseInt("AF",16);//175
var num2 = parseInt("AF");//NaN

不指定基数意味着让parseInt()决定如何解析输入的字符串,因此为了避免错误解析我们建议无论在什么情况下都明确指定基数。
多数情况下,我们要解析的都是十进制数,因此始终将10作为第二个参数是有必要的。

parseFloat()函数

与parseInt类似,
区别一:

但是parseFloat的第一个小数点是有效的,第二个小数点就无效了,后面的字符就被忽略了。如"22.3.4"就会被转换成22.3。

区别二:

parseFloat和parseInt的第二个区别在于它始终忽略前导0。
parseFloat()可以识别前面讲的浮点数,也包括十进制的数。但是十六进制的字符串始终会被转换为0

由于parseFloat()始终转换十进制,因此没有第二个参数的说法。

最后需要注意:

如果一个字符串字符包含的是一个可解析为整数的数(没有小数点,或者小数点后都是0),parseFloat会返回整数。

var num1=parseFloat("13erwf");//13
var num2=parseFloat("0xA");//0
var num3 = parseFloat("22.5");//22.5
var num4 = parseFloat("22.44.32");//22.44
var num5 = parseFloat("0908.4");//908.4
var num6 = parseFloat("3.125e7");//31250000

String类型

String类型用于表示由0 或多个16位Unicode字符组成的字符序列。可以用双引号,可以用单引号。两种字符串的写法都有效。引号必须成对的出现,即单引号开头,结尾必须为单引号。

var msg = "this is string";//有效
var msg = 'this is string';//有效
var msg = "this is string';//无效

5.1 字符字面量如下所示:
String类型的字符字面量
5.2 字符串的特点:

ECMAScript中字符串时不可变的。也就是说字符串一旦创建,它们的值就不会改变。
要改变某个变量保存 的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。

var lang = "java";
lang=lang+"script";
alert(lang);//javascript

如果字符串中的包含双字节字符,那么length属性可能不会精确地返回字符串中的字符数目。

双字节字符

单字节指只占一个bai字,是英文字符。双du字是占两个字节的,中文字符都占两个字节
单字节的英文是Byte;比特是最小的数值单位,它的英文是Bit。
一个字节包含8个比特,通常计算机初学者接触到的ASCII码就是单字节字符,由于计算机是二进制的,1个比特位只可以表示为0或者1这两种数,那8个比特(一般从右至左)就可以有0~127(2的8次方再减1)的不同的数值表示。
双字节字符即是包含了两个字节共16比特。
一般比较好理解的就是:英文字母属于单字节字符,而汉字则属于双字节字符。因为英文字母、数字、符号等完全可以用128种不同的数值来表示,而汉字太多则不能,所以才需要扩展到双字节。

ASCII码

ASCII码表

5.3 转换为字符串
要把一个数值转换为字符串的方法有两种:toString()方法和String()函数。

toString():

这个方法唯一要做的就是返回相应值的字符串的表现。

var age = 11;
var ageAsString=age.toString();//字符串"11"
var found = true;
var FoundAsString = found.toString();//字符串"true"

数值、布尔值、对象、字符串都有toString()方法,该方法返回字符串的一个副本,但是null和undefined没有这个方法。
多数情况下,toString方法不必传递参数。但是在调用数值的toString方法是,可以传递一个参数:输出数值的基数
默认情况下,toString方法以十进制格式返回数值的字符串表示。而通过传递基数可以输出二进制、八进制、十六进制,乃至其他任意有效的进制格式表示的数值

var num=10;
alert(num.toString());//"10"
alert(num.toString(2));//"1010"
alert(num.toString(8));//"12"
alert(num.toString(10));//"10"
alert(num.toString(16));//"a"

以上例子说明,toString方法会改变输出的值
注意:

默认的(没有参数)输出值与指定基数10时的输出值相同。

String函数

在不知道要转换的值是不是null或者undefined时,可以使用转型String(),这个函数能够将任何类型的值转换为字符串。String()函数遵循下面的转换规则:

  • 如果有值有toString()方法,则调用该方法没有参数并返回相应的结果。
  • 如果值是null,则返回"null"。
  • 如果值是undefined,则返回"undefined".
  console.log(String(null));//"null"
  console.log(String(undefined));//"undefined"

数值和布尔值的转换结果与调用toString()方法得到的结果相同。
因为null和undefined没有toString()方法,所以String()函数返回这两个字面量的值。

要把某个值转换为字符串,可以使用加号操作符把它与一个字符串("")加在一起。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值