美文网首页
回顾对象

回顾对象

作者: hellowade | 来源:发表于2017-08-31 10:03 被阅读0次

对象:一种无序的数据集合,由若干个“键值对”(key-value)构成。

开门见山,不想说话直接抛出一道经典题,复习下js中的引用类型

var o1 = {};
var o2 = o1;
o1.a = 1;
o2.a  //输出结果为1
var o1 = {};
var o2 = o1;
o1 = 1;
o2 // 输出结果为{}

分析:例一中,o1和o2均为引用类型,指向同一个内存地址,为其中任何一个变量添加属性,另一个变量都可以读写该属性。
例二中,o1和o2均为引用类型,指向同一个内存地址,之后对o1赋值,o1为基本类型,值为1,o2为引用类型。


继续复习对象

Object.keys可以查看一个对象本身的所有属性(key值),返回数组。
var obj = {
  a:1,
  b:2
}
Object.keys(obj) //["a","b"]
Object.keys(obj).length// 2,可计算对象key-value的对数
hasOwnProperty() 方法会返回一个布尔值,指示对象是否具有指定的属性作为自身(不继承)属性。
var obj = {
    a:1,
    b:2
}
obj.hasOwnProperty('a')   //输出结果为true
// obj.hasOwnProperty('c')  输出结果为false
delete命令用于删除对象的属性,删除成功后返回true。
var obj = {a:1}
Object.keys(obj) //["a"]
delete obj.a //true
obj.a //undefined
Object.keys(obj) // []
for...in循环用来遍历一个对象的全部属性。
var obj = {
  a:1,
  b:2
}
for (var i in obj){
console.log(i)  // a,b
} 

常见面试题之浅拷贝、深拷贝

拷贝的定义就是复制,怎么复制对象么,利用给对象添加key、value值的方式。

var a = {}
a.b = 1
console.log(a)

好,方法已经确定,那我们就新建一个空对象,遍历添加就好。

var oldObj = {
    a:1,
    b:2
}
function shallowCopy(oldObj){
    var newObj = {}
    for(var key in oldObj){
        if(oldObj.hasOwnProperty(key)){
          newObj[key] = oldObj[key]            
        }
    }
    return newObj
}
shallowCopy(oldObj)  //{a:1, b:2}

结果出来,符合预期。但好像有点不对,万一oldObj中存在值为对象,结果还会一样么,控制台输入试一下,无效.....结果的办法就是将对象的值再进行拷贝,递归

    function deepCopy(oldObj) {
        var newObj = {};
        for(var key in oldObj) {
            if(typeof oldObj[key] === 'object' & typeof oldObj[key] != null) {
                newObj[key] = deepCopy(oldObj[key]);
            }else{
                newObj[key] = oldObj[key];
            }
        }
        return newObj;
    }

常见面试题
将数组中的值遍历,记录出现的次数

function count(arr) {
    var count = {}
    for(var i = 0; i<arr.length; i++){
        if(count[arr[i]]){
          count[arr[i]]++  
        }else{
            count[arr[i]] = 1
        }
    }
    console.log(count)
}
count([1, 2, 4, 4, 3, 4, 3])  //{1: 1, 2: 1, 3: 2, 4: 3}

相关文章

  • 回顾对象

    对象:一种无序的数据集合,由若干个“键值对”(key-value)构成。 开门见山,不想说话直接抛出一道经典题,复...

  • Go语言没有类怎么面向对象

    回顾 先回顾下面向对象的三个基本特性: 封装 继承 多态 Java作为面向对象的王者,以下示例完美的展现了面向对象...

  • JS基础回顾:对象

    JavaScript的对象是一种无序的集合数据类型,它由若干键值对组成。 【示例一】: JavaScript用一个...

  • JS基础回顾-对象

    前提:默认已经熟悉js原型链。 1.对象设置get 和set的方法 2.Object.assign(target目...

  • 爱自己的每日回顾-2022/04/23

    基本信息 回顾对象:2022/04/23 回顾时间:2022/04/23~2022/04/24 指标回顾 1.1 ...

  • DOM

    一、知识回顾* BOM 概述* BOM 的各个对象* window对象innerHeight,innerWidth...

  • 爱自己的每日回顾-2022/04/20

    基本信息 回顾对象:2022/04/20 回顾时间:2022/04/20~2022/04/21 一、指标回顾 1....

  • 爱自己的每日回顾-2022/5/2

    基本信息 回顾对象:2022/05/02 回顾时间:2022/05/02 发布简书:2022/05/03 指标回顾...

  • 爱自己的每日回顾-2022/04/18

    基本信息 回顾对象:2022/04/18回顾时间:2022/04/18~2022/04/19 指标回顾 1.1 照...

  • jquery对于属性和事件的操作

    回顾js中对于属性的操作:dom对象: 通过document.getElementById().....获取的对象...

网友评论

      本文标题:回顾对象

      本文链接:https://www.haomeiwen.com/subject/kfefjxtx.html