数据类型显式转换(强制类型转换)
- 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。
- 先调用对象的toString() 方法
- 判断返回值的数据类型是否为基础数据类型(number Boolean string null undefind)
- 若返回值为基础数据类型,则按照其相应的规则转换数据类型
- 若返回值不为基础数据类型,则继续调用valueOf() 方法
- 继续判断返回值是否为基础数据类型
- 若是,则进行操作3
- 若不是则报错
把Object 转为Number
/*
1.如果只重写了valueOf()或者toString()方法,则调用该方法,并将返回值用Number()转换。
2.如果两个方法都重写了,则调用valueOf(),并将返回值用Number()转换。
3.如果两个方法都没有重写,则返回NaN
*/
规则:显示转换与隐式转换规则类似,当要将对象转换为String时,类似隐式转换中的PreferredType为Number。
- 先调用对象的valueOf() 方法
- 判断返回值的数据类型是否为基础数据类型(number Boolean string null undefind)
- 若返回值为基础数据类型,则按照其相应的规则转换数据类型
- 若返回值不为基础数据类型,则继续调用toStrigf() 方法
- 继续判断返回值是否为基础数据类型
- 若是,则进行操作3
- 若不是则报错
检测属性
检测一个属性是否属于某个对象。常用的方式主要有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