阿里国际 ae 1面
2024.9.12
阿里国际 ae 一面
1、问题:请至少写 4 种 CSS 方案实现元素垂直和水平居中
<div class="box center1 center2">
<div class="inner inner3">33</div>
</div>
<style>
.box {
width: 200px;
height: 200px;
}
.inner {
width: 50px;
height: 50px;
}
.center1 {
text-align: center;
/* 比较新的css支持 */
align-content: center;
}
.center2 {
display: flex;
/* grid 也可以 */
align-items: center;
justify-content: center;
}
.center3 {
display: relative;
}
.inner3 {
display: absolute;
top: 0;
right: 0;
left: 0;
bottom: 0;
margin: auto;
}
.center4 {
display: relative;
}
.inner4 {
display: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
</style>
2、问题:下面代码输出为 true 的是?
A. console.log([] === []);B. console.log(undefined == 0);C. console.log(undefined == false);D. console.log(false == '');
D, 没问题
3、问题:以下哪项可以去除变量 str 中的所有空格
A. str.replace(/\s*/g,"")B. str.replace(/^\s|\s$/g,"")C. str.replace(/^\s*/, "")D. str.replace(/(\S*$)/g, "")
A,没问题
4、问题:请回答以下代码执行结果
console.log('同步代码 1')
setTimeout(() => {
console.log('setTimeout')
}, 0)
new Promise((resolve) => {
console.log('同步代码 2')
resolve()
}).then(() => {
console.log('promise.then')
})
console.log('同步代码 3')
<!-- 同步代码1 --><!-- 同步代码2 --><!-- 同步代码3 --><!-- promise.then --><!-- setTimeout -->
5、问题:请回答点击 content 后以下代码的执行结果
<div id="box1">
<div id="box2">content</div>
</div>
<script>
const $ = document.querySelector.bind(document)
const box1 = $('#box1')
const box2 = $('#box2')
box1.addEventListener(
'click',
() => {
console.log('box1 true')
},
true,
)
box1.addEventListener(
'click',
() => {
console.log('box1 false')
},
false,
)
box2.addEventListener(
'click',
() => {
console.log('box2 true')
},
true,
)
box2.addEventListener(
'click',
() => {
console.log('box2 false')
},
false,
)
</script>
<!-- box2 false -->
错了,重复注册不会被覆盖,会都执行,正确的后面看看
6、问题:请回答以下 TS 代码的执行结果。如果有错误 请描述出来。
var user = {
level: null,
level1: 0,
}
var level1 = user.level ?? '暂无等级' // 暂无等级
var level2 = user.other_level ?? '暂无等级' // 暂无等级
var level3 = user.level1 ?? '暂无等级' // 0
console.log(level1, level2, level3)
var num = 2 ** 3
console.log(num)
// 暂无等级 暂无等级 0// 8
分析没问题,但是 level2 应该是报错
7、问题:请修改以下代码,在控制台中每隔 1s 打印数组中的一个元素,直到最后一个元素打印完成
var arr = [1, 2, 3, 4, 5]
for (var i = 0; i < arr.length; i++) {
setTimeout(function () {
console.log(arr[i])
}, 1000)
}
var arr = [1, 2, 3, 4, 5]
for (let i = 0; i < arr.length; i++) {
setTimeout(function () {
console.log(arr[i])
}, 1000)
}
有点问题,1000 也应该处理一下,不然都是一次性打印出来了
8、问题:如何在 setInterval 中读取最新的 count 值? 如何让 num 可以递增?
import { useEffect, useState } from 'react'
export default function App() {
const [num, setNum] = useState(0)
const [count, setCount] = useState(0)
useEffect(() => {
setCount(1)
setInterval(() => {
console.log(count)
setNum(num + 1)
}, 500)
}, [])
console.log('num:', num)
return null
}
import { useEffect, useState } from 'react'
export default function App() {
const [num, setNum] = useState(0)
const [count, setCount] = useState(0)
useEffect(() => {
setCount(1)
setInterval(() => {
// setCount接受的变量直接传给下面这个
console.log(count)
setNum((num) => num + 1)
}, 500)
}, [])
console.log('num:', num)
return null
}
没啥问题
9、问题:如何实现以下方法调用
add(1, 2)(3) //6; add(1)(2, 3) //6;
const add = (a, b, c) => a + b + c
const curry = (fn) => {
const newFn = (...rest) => {
if (rest.length >= fn.length) {
return fn(...rest)
} else {
return (...newRest) => newFn(...rest, ...newRest)
}
}
return newFn
}
const curriedAdd = curry(add)
curriedAdd(1, 2)(3) //6;
curriedAdd(1)(2, 3) //6;
柯里化,没啥问题,问了我想写 js 实现还是算法,选的 js 实现后出的这一题
查看9道真题和解析