1、类型
2、对象类型
3、原始类型和对象类型之间的区别
4、隐式类型转换
⑴JS语言什么场景下会做隐式类型转换?
除了加之外所有的数字运算符,当一方是数字,另一方是字符串时,会被隐式转换为数字进行计算;而加时,数字被隐式转化为字符串。
⑵这些隐式类型转换的结果怎样?
⑶隐式类型转换不满足需求时,如何显式地进行类型转换?
10 + Number(num.value)
5、类型识别
⑴ typeof 操作符
⑵ instanceof 方法
⑶ Object.prototype.toString.call 借用函数方法
⑷constructor 构造函数
??Q1:如何复制一个对象?
通过课程学习我们知道,对象作为引用类型,使用运算符=时,只是复制了对象的地址。
比如如下代码
var obj1 = {a:1};
var obj2 = obj1;
obj2.a = 2; // 此时obj1.a ===
修改对象obj2同时会改变obj1,那么如果我们需要克隆出一个独立但属性、方法完全一样的对象,该如何实现?
A:
function deepCopy (p,c) {
var c=c||{};//用来存放副本
for(var i in p){//遍历p对象中的属性
if (typeof p[i]==="object") {//若属性仍旧为对象
c[i]=(p[i].constructor===Array)?[]:{};
deepCopy(p[i],c[i]);
} else {//属性是基本类型
c[i]=p[i];
}
}
return c;
}
var parent={name:"Joe",age:44,function(){return 1;}},
child=deepCopy(parent);
console.log(child);```
Q2:JS和强类型语言(比如C++)在类型方面的主要区别?
A:强类型语言:强制定义数据类型的语言。一个变量被指定了某个数据类型,不经过强制转换,将永远是被指定的数据类型,而不能是其它类型。
弱类型语言:数据类型可被忽略的语言。与强类型语言相反,变量的数据类型可被赋予值得不同,反复替换。