网易微专业-JS15类型进阶

1、类型

网易微专业-JS15类型进阶_第1张图片
Paste_Image.png

2、对象类型

网易微专业-JS15类型进阶_第2张图片
Paste_Image.png

3、原始类型和对象类型之间的区别

网易微专业-JS15类型进阶_第3张图片
原始类型值直接存在栈内存 而对象类型,在栈内存中只是一个地址(指向堆内存),其值存在堆内存中,f.a访问其值
网易微专业-JS15类型进阶_第4张图片
原始类型中,num1和num2是两个完全独立的变量 对象类型,将obj1符给obj2,JS中实现的只是将obj1在栈内存中的地址符给obj2,所以改变obj1的值,obj2的值也随之发生变化

4、隐式类型转换
⑴JS语言什么场景下会做隐式类型转换?
除了加之外所有的数字运算符,当一方是数字,另一方是字符串时,会被隐式转换为数字进行计算;而加时,数字被隐式转化为字符串。

网易微专业-JS15类型进阶_第5张图片
Paste_Image.png

⑵这些隐式类型转换的结果怎样?

网易微专业-JS15类型进阶_第6张图片

⑶隐式类型转换不满足需求时,如何显式地进行类型转换?
10 + Number(num.value)


网易微专业-JS15类型进阶_第7张图片
显示类型转换方法

5、类型识别

网易微专业-JS15类型进阶_第8张图片
Paste_Image.png
网易微专业-JS15类型进阶_第9张图片
Paste_Image.png

⑴ typeof 操作符

网易微专业-JS15类型进阶_第10张图片
typeof不是一个函数或方法,而是一个操作符

⑵ instanceof 方法

网易微专业-JS15类型进阶_第11张图片
instanceof可以识别所有对象类型

⑶ Object.prototype.toString.call 借用函数方法

网易微专业-JS15类型进阶_第12张图片
Paste_Image.png

⑷constructor 构造函数


网易微专业-JS15类型进阶_第13张图片
因为undefined和null
网易微专业-JS15类型进阶_第14张图片
Paste_Image.png

??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:强类型语言:强制定义数据类型的语言。一个变量被指定了某个数据类型,不经过强制转换,将永远是被指定的数据类型,而不能是其它类型。
弱类型语言:数据类型可被忽略的语言。与强类型语言相反,变量的数据类型可被赋予值得不同,反复替换。

你可能感兴趣的:(网易微专业-JS15类型进阶)