js中的类型转换

1 篇文章 0 订阅
1 篇文章 0 订阅

Number()函数的转换规则:

1.如果是Boolean值,true和false将分别被转换成1和0;
2.如果是数字值,只是简单的传入和返回。
3.如果是null值,返回0。
4.如果是undefined,返回NaN。
5.如果是字符串,遵循下列规则:
① 如果字符串中只包含数字,将其转换为十进制数
② 如果包含有效的浮点格式如1.1 将其对应转换为浮点数
③如果包含有效的十六进制格式 如0Xf 则转换成对应十进制数
④如果是空字符串 转换成0
⑤如果为上列格式之外的 转换为NaN。
6.如果是对象则调用对象的valueOf()方法,然后确定该方法返回的值是否可以转换为数值。如果不能,则基于这个返回值再调用toString()方法

处理整数时更常用到parseInt():

例:var num1=parseInt(“1234blue”); //1234
var num2=parseInt(""); //NaN
var num3=parseInt(“0xA”) //10(十六进制数转换为十进制)
var num4=parseInt(“070”) //56 (八进制数转换为十进制数)
var num5=parseInt(“22.5”) //22
var num6=parseInt(“70”) //70(十进制数)
var num7=parseInt(“0xf”) //15(十六进制数转换为十进制)

因为在解析八进制数时易产生分歧(070可能被认为是56也可能被认为是70)所以引入了第二个参数
parseInt(string,基数)
var num=parseInt(“070”,8) //56
var num=parseInt(“070”,10) //70

若指定了16为基数 那么0x可被省略
var num=parseInt(“AF”,16) //175
var num=parseInt(“AF”) //NaN
建议无论什么情况下都指定基数

tring类型

tostring:
var age=11;
var ageAsString=age.toString(); //字符串“11“
数值,布尔值,对象和字符串值都有toString()方法。但null和undefind值没有这个方法。

通常情况下调用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”

String(): 该方法能将任何类型的值转换为字符串。

Object类型

object的每个实例都具有以下属性和方法

  1. constructor: 保存着用于创建当前对象的函数。
  2. hasOwnproperty:检查给定的属性在当前对象实例中是否存在。
  3. isPrototypeof(object): 用于检查传入的对象是否是当前对象的原型。
  4. propertyIsEnumeranle(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。
  5. toLocaleString(): 返回对象的字符串表示,该字符串与执行环境的地区对应。
  6. toString(): 返回对象的字符串表示.
  7. valueOf(): 返回对象的字符串、数值、或布尔值表示。通常与toString()方法的返回值相同。

lable的使用:

var itemsId = [1,3];
var all = [[{id:1,name:hehe},{id:3,name:hehe}],[{id:2,name:hehe},{id:4,name:hehe}]];
//我们有上边两个数组,itemsId是id数组,all是一个二维数组,其中的元素是,按照id的奇偶进行区分放置的,项目的对象。现在我们希望找到每个items中id对应的对象,这时候就要多重循环来查找:
for(var i=0;i<itemsId.length;i++){
for(var j=0;j<all.length;j++){
for(var k=0;k<all[j].length;k++){
if( all[j][k].id == itemsId[i] ){
console.log(all[j][k]);
break;
}
}
}
}
//这时候我们会发现,当我们找到合适的对象之后,使用break只能跳出最内层的k循环,而j循环会继续执行下去。就产生了许多没必要的循环。我们希望,当找到之后,直接跳到j循环外,从下一个id开始查找。此时,就要用到label了。代码如下:
for(var i=0;i<itemsId.length;i++){
outPoint:
for(var j=0;j<all.length;j++){
for(var k=0;k<all[j].length;k++){
if( all[j][k].id == itemsId[i] ){
console.log(all[j][k]);
break outPoint;
}
}
}
}
//这样,在all[j][k].id == itemsId[i]的时候,就会跳出到outPoint的位置,直接跳出两个循环,从下一个id开始查找。少循环了许多次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值