【Javascript】-- 数据类型显式转换 & 属性检测

数据类型显式转换(强制类型转换)

  • Boolean(value):将给定的值转换为Boolean类型
  • String(value):将给定的值转换为String类型
  • Number(value):将给定的值转换为Number类型 -- 可以是整数或者浮点数

把Object 转为Boolean

// 除了空引用(null)会转换为false,其他都被转换为true
var obj = {
  name:"zzy",
  age:17
};
// 使用Boolean包装器进行转换
console.log(Boolean(obj));

 把Object 转为String

我们可以自己重写 toString() 方法:

 规则:显示转换与隐式转换规则类似,当要将对象转换为String时,类似隐式转换中的PreferredType为String。

  1. 先调用对象的toString() 方法
  2. 判断返回值的数据类型是否为基础数据类型(number Boolean string null undefind)
  3. 若返回值为基础数据类型,则按照其相应的规则转换数据类型
  4. 若返回值不为基础数据类型,则继续调用valueOf() 方法
  5. 继续判断返回值是否为基础数据类型
  6. 若是,则进行操作3
  7. 若不是则报错

 把Object 转为Number

/*

    1.如果只重写了valueOf()或者toString()方法,则调用该方法,并将返回值用Number()转换。

    2.如果两个方法都重写了,则调用valueOf(),并将返回值用Number()转换。

    3.如果两个方法都没有重写,则返回NaN

  */

 规则:显示转换与隐式转换规则类似,当要将对象转换为String时,类似隐式转换中的PreferredType为Number。

  1. 先调用对象的valueOf() 方法
  2. 判断返回值的数据类型是否为基础数据类型(number Boolean string null undefind)
  3. 若返回值为基础数据类型,则按照其相应的规则转换数据类型
  4. 若返回值不为基础数据类型,则继续调用toStrigf() 方法
  5. 继续判断返回值是否为基础数据类型
  6. 若是,则进行操作3
  7. 若不是则报错

检测属性

检测一个属性是否属于某个对象。常用的方式主要有3种:

in

检测某属性是否是某对象的自有属性或者是继承属性

var obj = {
  name: 'zzy',
  age: 17,
  school: 'xx大学'
}
//in运算符的左侧为属性名称,右侧为对象
console.log('name' in obj); //true
console.log('age' in obj);  //true
console.log('gender' in obj); //false
//如果用in判断一个属性存在,这个属性不一定是obj的,
//它可能是obj继承得到的,如:
'toString' in obj;  //  true
因为toString定义在object对象中,
//而所有对象最终都会在原型链上指向object,所以obj也拥有toString属性。

Object.prototype.hasOwnProperty()

检测给定的属性是否是对象的自有属性,对于继承属性将返回false

var obj = {
  name: 'zzy',
  age: 17,
  school: 'xx大学'
}
console.log(obj.hasOwnProperty('name')); //true
console.log(obj.hasOwnProperty('age'));  //true
console.log(obj.hasOwnProperty('toString')); //false,toString为继承属性
console.log(obj.hasOwnProperty('gender')); //false

Object.prototype.propertyIsEnumerable()

propertyIsEnumerable()是hasOwnProperty()的增强版,除了是自身属性外,还要求是可枚举属性,即我们创建的属性。

var obj = {
  name: 'zzy',
  age: 17,
  school: 'xx大学'
}
console.log(obj.propertyIsEnumerable('name')); //true
console.log(obj.propertyIsEnumerable('age'));  //true
console.log(obj.propertyIsEnumerable('toString')); //false,不可枚举
console.log(obj.propertyIsEnumerable('gender')); //false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值