小厂一面: 请准备好水(二)

简介: 小厂一面: 请准备好水(二)

前言

现在到了春招的黄金时期,本人和小伙伴们也都开始了面试,今天在这篇文章中记录我的第一个面试经历,不知道小伙伴们是否跟我一样,在第一次面试时都很紧张呢?

查看对象里的所有属性

使用Object.keys(obj), 来查看对象中的属性,假设我们有一个对象:

let obj = {a: 1, b: 2, c: 3}
    Object.keys(obj)
    // 输出 ['a', 'b', 'c']

但是小伙伴们,这个方法只能查找对象中的可枚举属性,如果对象中有一个属性是不可枚举的,将查找不到。

Object.defineProperty(obj, 'a', 
    { value: 1, enumerable: false // 将属性设置为不可枚举 
});

在JS中,这个方法可以将对象的属性设置为不可枚举属性。

两个等号和三个等号的区别

这个问题,在面试当中是十分容易被问到的,那他们有什么区别呢?

两个等号只判断值是否相等,当等号两边的类型不同时,会将两个数进行隐式类型转换,然后再比较值。当类型相同时,则会直接比较

三个等号会进行严格比较相等,会判断值和类型是否都相等。

console.log(1 == '1');  // true,会进行类型转换,字符串 '1' 转换为数字 1
console.log(1 === '1'); // false,类型不同,不会进行类型转换,数字 1 和字符串 '1' 不相等

同时,这其中的重要知识点就是类型转换了,大家想具体了解的话可以翻翻我以前的文章,我有详细讲解过点击跳转:类型转换

如何判断两个对象是否相等

首先,两个对象是不可能相等的,因为对象是引用数据类型,他们的引用地址是不相同的。这里我们要判断的是两个对象当中的属性是否完全相同,如果完全相同,那么我们就判断这两个对象相等。

js中是没有提供方法让我们判断两个对象中的属性是否相等的,所以我们需要手写一个方法,判断是否相等。

// 如何判断两个对象是否相等
function equal(v1, v2) {
    if ((typeof v1 === 'object' && v1 !== null) && (typeof v2 === 'object' && v2 !== null)) {
        if (Object.keys(v1).length !== Object.keys(v2).length) {
            return false
        }
        for (let key in v1) {
            if (v2.hasOwnProperty(key)) {
                if (!equal(v1[key], v2[key])) {
                    return false
                }
            } else {
                return false
            }
            return true
        }
    } else {
        return v1 === v2
    }
}

Vue

说说vue中的响应式远离

Vue 3 中的响应式原理主要基于 JavaScript 的 Proxy 对象。Proxy 对象用于定义基本操作的自定义行为(如属性查找、赋值、枚举、函数调用等),因此在 Vue 3 中,它被用来捕获对象的基本操作,从而实现响应式数据的追踪和更新。

先给大家介绍一下Proxy:

const target = {
  name: 'Alice',
  age: 30
};
const handler = {
  get(target, property) {
    console.log(`Getting ${property}`);
    return target[property];
  },
  set(target, property, value) {
    console.log(`Setting ${property} to ${value}`);
    target[property] = value;
  }
};
const proxy = new Proxy(target, handler);
proxy.name; // 输出: "Getting name"
proxy.age = 35; // 输出: "Setting age to 35"

这就是具体的Proxy的介绍以及他的用法,而在vue3中响应式原理主要就是靠Proxy代理一个对象来实现的,当然光是这样说肯定是不够的,小伙伴们可以看看掘金上其它大佬的文章,这里可以看看这位掘友的文章,写的十分的不错~点击此处跳转,手写简单的vue3响应式原理

相关文章
|
9天前
|
JavaScript
说说这些年我做的副业
说说这些年我做的副业
|
前端开发 JavaScript 数据可视化
9 年小厂老前端的年终总结
时光飞逝,岁月如梭,转眼来到 2021 年底,这一年少了些理性,多了点感性,少了些自由,多了一份责任,这一年视乎没做什么事情,但又过得非常充实,最欣慰的是回家有个人等待着我的拥抱,最快乐的是...
1288 0
|
弹性计算 大数据 程序员
据说这些是互联网公司招工时忽悠的黑话,大家来看看是不是真的?
据说这些是互联网公司招工时忽悠的黑话,大家来看看是不是真的?
135 0
据说这些是互联网公司招工时忽悠的黑话,大家来看看是不是真的?
|
资源调度 大数据
疫情下,这群工程师抢了“表哥”的饭碗
在疫情防控工作最关键的当下,如何不将时间浪费在填表上,如何避免成为“表哥”、“表姐”?
5368 0
疫情下,这群工程师抢了“表哥”的饭碗
|
机器学习/深度学习 新零售 存储
|
传感器 数据采集 监控
机器狗的烦恼:网红练习生容易,商业实习生好难
好比临近毕业正在找工作的实习生,波士顿动力的产品具备了基础理论知识,还缺少实践经验。
|
分布式计算 关系型数据库 Java
不要争了!技术选择没那么重要
摘要: 技术没有高下之分,做好产品才是王道。 很多开发者非常热衷于比较不同技术,比如:Angular 是否比 Vue.js 更好?Node.js 能否取代 Java?究竟应该选择 MySQL 还是 MongoDB 呢? 认真对比不同技术之间的优劣是非常有价值的事,可以加深我们对技术的理解,根据业务场景选择更合适的技术。
3788 0
|
程序员 Android开发
又一名程序员倒下,内心悲哀:我们只是新时代农民工
又一名程序员倒下,究竟是社会的摧残还是生活的压力?作为程序员,我们想到了什么
1851 0
|
存储 安全 大数据
确认过眼神?上云之路需要遇上对的人!
在“上云就上阿里云”解决了上什么云的问题之后,如何上云成为企业技术人员头疼的问题。业务系统云上应用基础架构应该如何设计、系统存储与数据库如何才能平滑迁移等等成为企业上云之路的障碍。为了解决企业上云前的痛点,阿里云支持与服务团队重磅推出咨询与设计场景下五款专家服务产品。