隐式转换
1.基本数据类型
number + 'string' =》string
number + number =》number
2.引用数据类型
object valueOf() toString()
隐式转换规则
// 1.data默认调用的是toString() (Date求原始值比较特殊,PreferredType是String,其他Object对象均为Number)
// 2.如果内部重新写了toString()调用toString()
// 3.如果内部重写了valueOf()调用valueOf()
// 4.如果内部重新写了toString()和valueOf() 调用valueOf(); (其他Object对象的PreferredType均为Number)、
[] + [] // ""
[] + {} // "[object Object]"
{} + [] // 0 (
js解释器会将开头的 {}
看作一个代码块,而不是一个js对象;{ } + [ ]被解析成了
{ };+[ ],前面是一个空代码块被略过,剩下+[ ]就成了一元运算。[ ]的原值是””, 将””转化成Number结果是
0。
)
{} + {} // "[object Object][object Object]" 或 NaN (在金丝雀版本的chrome浏览器和node中,结果符合预期。结果是"[object Object][object Object]" 。原因是在node中会将以“{”开始,“}”结束的语句外面包裹一层( ),就变成了({ } + { }),结果就符合预期。 )
显式转换
1.将其他数据类型转换为String
1.toString()
2.+ "" 或者+ ''
3.String()
2.将其他数据类型转换为number
1.Number()
Number(true); //1
Number(false); //0
Number(null); //0
Number(undefined); //NaN
Number(10); //10 如果是数字值,原样输出
2.parseInt();
parseInt(10); //10 如果是整数值,原样输出
parseInt(10.3); //10 如果是小数,舍去小数点一级后面的内容
parseInt("+12.1"); //12; 首位为符号位,其余为为数值,转换为整数
parseInt("1+2.7"); //1; 符号位出现在其他位置,保留符号位前面的数值
parseInt("0xa"); //10; 如果仅包含十六进制格式,转为为对应的十进制的值
parseInt("010"); //10; 【注意】不会当做八进制被解析,结果为10
parseInt(""); //NaN;空字符串被转换为NaN
parseInt("123ac"); //123;
3.parseFloat();
parseFloat("123"); //123;如果仅包含数值,转换为对应的数值
parseFloat("234.1"); //234.1;保留小数点后面的数值
parseFloat("+12.1"); //12.1; 首位为符号位,其余为为数值,转换为整数
parseFloat("1+2.6"); //1;符号位出现在其他位置,保留符号位前的数值
parseFloat("0xa"); //0; 【注意】不会当做十六进制来解析。
parseFloat("010"); //10; 【注意】不会当做八进制被解析,结果为10
parseFloat(""); //NaN;空字符串被转换为NaN
parseFloat("123.3ac"); //123.3;
4.+
+"23" //23
+null //0
+undefined //NaN
3.将其他数据类型转换为Boolean
1.Boolean() Boolean('hello') //true
2.!!a !!'hello' //true
对象
1.单个对象的创建
字面量 var obj={}
构造函数 var obj=new Object();//{}
2.对象的访问
点访问 obj.name
中括号访问 obj['age']
3.遍历对象
for(let key in obj){
key--键 属性名
obj[key]--值 属性值
}
var str='hjagsjfkahk';
for(let key of obj){
}
4.删除对象属性
delete obj.name
5.显示类型转换
Boolean()
String()
Number()
6.检测属性
1.in (检测某属性是否是某对象的自有属性或者是继承属性)
'name' in obj 'valueOf' in obj
2.hasOwnProperty(检测属性是否是自有属性 继承属性返回false)
obj.hasOwnProperty('valueOf');//false
3.propertyIsEnumerable(检测属性是否是可枚举属性 可枚举属性返回true)
obj={
name:"zhangsan",
age:12
}
7.原型 *****
原型:每一个构造函数都有一个原型对象,原型对象都有一个指针(constructor)指向构造函数
实例有一个指针(__proto__)指向原型对象
静态方法:只能由构造函数本身去调用
Object.defineproperty()
实例/原型方法:存在原型对象中得方法 valueOf() toString() constructor