网易微专业-JS15类型进阶

1、类型

Paste_Image.png

2、对象类型

Paste_Image.png

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

原始类型值直接存在栈内存 而对象类型,在栈内存中只是一个地址(指向堆内存),其值存在堆内存中,f.a访问其值
原始类型中,num1和num2是两个完全独立的变量 对象类型,将obj1符给obj2,JS中实现的只是将obj1在栈内存中的地址符给obj2,所以改变obj1的值,obj2的值也随之发生变化

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

Paste_Image.png

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

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


显示类型转换方法

5、类型识别

Paste_Image.png
Paste_Image.png

⑴ typeof 操作符

typeof不是一个函数或方法,而是一个操作符

⑵ instanceof 方法

instanceof可以识别所有对象类型

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

Paste_Image.png

⑷constructor 构造函数


因为undefined和null
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:强类型语言:强制定义数据类型的语言。一个变量被指定了某个数据类型,不经过强制转换,将永远是被指定的数据类型,而不能是其它类型。
弱类型语言:数据类型可被忽略的语言。与强类型语言相反,变量的数据类型可被赋予值得不同,反复替换。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.1 什么是自动引用计数 概念:在 LLVM 编译器中设置 ARC(Automaitc Reference Co...
    __silhouette阅读 5,258评论 1 17
  • 早上醒来,吴同学刚学车回来,就嚷嚷着带我去医院看,前天晚上我急性肠胃炎,昨晚还是有间歇性疼痛,我不想去,怕医生给...
    夜半阑珊阅读 206评论 0 2
  • 刚发现一本书书名就叫sed和awk,书厚432页,简直吓S。。原来这两个命令这么强大的吗?现在才只会用点皮毛就已经...
    lxt阅读 398评论 2 1
  • 简介 Queue是一种很常见的数据结构类型,在java里面Queue是一个接口,它只是定义了一个基本的Queue应...
    望月成三人阅读 392评论 0 0
  • 我不知道书的封面外边包的那个条状的纸叫什么,现在很多新书像得了奖一样,精神抖擞地挂着这样的“绶带”被摆在架子上出售...
    白熊妈妈阅读 166评论 4 0