跳到主要内容

CSS 的 zoom 属性会缩放元素位置吗

· 阅读需 3 分钟
Hanasaki
阿巴阿巴阿巴

在开发过程中遇到一个情况,使用的绝对定位,同时用 zoom 属性缩小元素,然后计算 left 和 top 偏移量,使得改变大小后中心位置不变。发现在增加 left 和 top 时,反而元素位置离左上角更近了。

zoom 怎么会影响定位呢?结论在末尾!

缩放到 0.1 时

此时元素实际宽高均为 50px,而距离容器左边和上边距离容器左边和上边明显不够 1234px,仅仅是他宽高的 2 倍多一点(约123.4px)。 可见 left 和 top 也被等比例缩放了。

position: absolute;
width: 500px;
height: 500px;
zoom: 0.1; // 缩放到0.1
left: 1234px;
top: 1234px;

记录第一次在贝壳链家租房经历

· 阅读需 36 分钟
Hanasaki
阿巴阿巴阿巴
备注

我是一点都不想代入搬家那两天的经历,心里会泛上来那种极度的、空荡的失落感,这种感觉常出现在小时候去亲戚家玩,夜晚回不了自己家,只能留宿,然后直到凌晨也睡不着的情况。

以及上初中开始寄宿,傍晚5点太阳落山,同学们都去吃饭了,自己一个人想着家里应该在做饭、晚上吃的什么、电视在放什么、按平常的话我们一边吃饭一边看电视,然后吃完饭会下楼散散步,但现在周围都很陌生,一人极度失落。

随着年纪增长,或许是对距离的感知变强了,或许是自主的能力变强了,这种情绪已经没有出现过,除了这次租房入住的当晚,达到顶峰。

前言

在公司旁边租的房子要在6月24号到期了,我对象的公司差不多6月底要也搬,于是找房东续了1个月再定具体租到哪里。因为是自己找的房东,没有通过中介平台,所以都很好商量。

开始找房

7月,在确定租房的目标小区后,对象在小区里转悠着询问谁家出租,同时我们不断在闲鱼上看房,想找一个房东直租的看看。但是始终没有找到合适的房源,遍地都是中介发布的信息,有很多打着房东直租的旗号,点开头像看到主页发布了几十套房子,真无语😅。

实在找不到房东直租的,我开始在贝壳上看房,并联系了中介带看。最初先让中介推荐了几套,由于我不太着急且工作日晚上没有时间,周五想去看就发现全都被定下了。不过,房子建的这么多,还怕找不着一个能住的?我开始自己在贝壳上看,在收藏了7、8套之后,发给中介,发现也基本全都失效了⁈ 中介告诉我有的被订,有的被下架,有的被其他小中介以更低的中介费抢单。

我开始着急了,怎么app里这么多好房,实际却都是失效的?中介让我直接来,当场按照有效的房源都挑挑看看,我们约定了周六下午4点。

周六,看了几套房之后,发现这小区多多少少都有些墙面渗水、起皮发霉的情况,即使在二十多楼也存在这种情况。最后一套我其实还是比较喜欢的,楼高、安静,但奈何租金要3000元,并且设施也比较简陋。当天还有几个没能看的,我与中介约定周日再来看看。

周日,我们看了2套,第一套也是一如既往的样子,设施老旧,看着年久失修的水管还在漏水。在看第2套时,也就是接下来故事围绕的房子,在门外我和中介就听到了里面欢声笑语吵吵闹闹的声音,穿上中介给我的鞋套,我们敲门进来了。进门感到非常凉快,看来空调不错,屋内也没有什么异味,看到1男2女坐在客厅餐桌前玩手机,点头示意后,我开始打量着客厅、厨房、卧室,屋内设施应有尽有,热水器是燃气的,符合我的要求,我不喜欢电热水器;厕所我看了马桶也是很新的,盖子没坏;淋浴也有隔断,干湿分离;冰箱、滚筒洗衣机、大电视应有尽有。我心动了,出门后就告诉中介我想订下这一套。

注意

以上是错误示范,正确的做法应该是,应先确认房屋内设施的归属,并征得当前租户的同意,然后:

  1. 检查所有设备、家具、电器是否完好,使用正常
  2. 水槽、下水道等管道是否通畅,没有反水反臭
  3. 检查门窗是能否关紧,不漏风漏雨
  4. 卧室不要挨着闹市区的马路

确保些没有问题,再与同住人商量,共同决定是否租住。

谈价格交定金

和中介下楼过程中,告诉他这是我这两天看到最好的一套,他也觉得不错,毕竟是有人住的肯定和长期空着的不一样。接下来就是谈价格,中介给同事打了电话,报上了我们的价格2600(标价2800),然后等同事与房东的沟通结果。

过了一会同事回电话了,并转达价格可以接受,因为我需要配合看房(该房既租也卖),所以价格好谈。如果需要订下,就付个1000的定金,然后等当前的租户搬走,在我将要入住时再签合同付剩下的钱。我问交定金是否会出具一个协议或者单子,中介说不会,并表示:“我们链家是正规公司,不会拿走你这个钱的”。他告诉我,会备注好这笔微信转账 [1],然后转给房东,让我放心。交完定金,我问是不是这些流程就算走完了,没别的事情了。中介告诉我,到时候要搬来时,签合同就可以了。之后,他骑车送我到地铁站,告诉我回去有什么问题直接联系他。

图1 - 中介向房东转定金

在地铁站与对象碰面,与她分享了这段经历,为轻轻松松找到房子的而感到开心的同时,也感觉贝壳真的省心,我是真的嘴笨不会砍价,中介直接帮我砍掉200,一年能省不少钱。

至此,一切都还算正常。

V8的快属性|Fast properties in V8

· 阅读需 19 分钟
Hanasaki
阿巴阿巴阿巴
信息

本文翻译、修改自 Fast properties in V8,其中会删除、修改、批注部分内容,但不改变原本的意思,使阅读更加通顺。

在本篇内容中,我们将介绍 V8 内部是如何处理 JavaScript 属性的。从 JS 的角度来看,对象(Object)和 字典(Dictionary)差不多:以字符串为键,任意对象为值。不过,在进行迭代时,会对整数索引的属性和其他属性进行不同的处理。其他情况下,不同属性的行为基本相同,与是否整数索引无关。

不过,出于性能和内存方面的考虑,V8 确实依赖于几种不同的属性表示方式。在本篇文章中,我们将解释 V8 是如何在处理动态添加的属性时提供快速的属性访问。同时,了解属性的工作原理对于解释 V8 是如何做优化的,例如内联缓存,也是至关重要的。

本文将先阐述处理整数索引属性和命名属性的区别,然后,我们将展示 V8 在添加命名属性时,如何维护 HiddenClasses 以便提供一种快速识别对象形状的方法。然后,我们将继续深入介绍命名属性是如何根据使用情况进行优化的,以实现快速访问或修改。最后,我们将详细介绍 V8 如何处理整数索引属性或数组索引。

JS 递归深拷贝

· 阅读需 4 分钟
Hanasaki
阿巴阿巴阿巴

思路

从最基本的拷贝开始,一步一步处理更复杂的对象、类型。

拷贝对象字面量

先考虑基本类型和层层对象的情况,直接 for-in 遍历 + 递归拷贝

function deepClone(obj) {
// 基本类型直接返回
if (typeof obj !== 'object') return obj;
const newObj = {};
for (let key in obj) {
// 只复制自身的对象
if (Object.hasOwn(obj, key)) {
newObj[key] = deepClone(obj[key]);
}
}
return newObj;
}

防抖函数绑定 this

· 阅读需 2 分钟
Hanasaki
阿巴阿巴阿巴

为什么防抖这样写不行?

function debounce(fn, delay) {
let timeout;
return function () {
if (timeout) clearTimeout(timeout);
timeout = setTimeout(fn, delay, ...arguments);
};
}