题目
const obj1 = {
a: 100 ,
b: {
x: [ 1 , 2 , 3 , NaN ] ,
y: 100
}
}
const obj2 = {
a: 100 ,
b: {
x: [ 1 , 2 , 3 , NaN ] ,
y: 100
}
}
function isObject ( obj) {
return typeof obj === 'object' && obj !== null
}
function isNaN ( number) {
return Number. isNaN ( number)
}
Object. prototype. isEqual = function isEqual ( obj1, obj2) {
if ( ! isObject ( obj1) || ! isObject ( obj2) ) {
if ( isNaN ( obj1) && isNaN ( obj2) ) {
return true
}
return obj1 === obj2
}
if ( obj1 === obj2) {
return true
}
const obj1KeyCount = Object. keys ( obj1)
const obj2KeyCount = Object. keys ( obj2)
if ( obj1KeyCount. length !== obj2KeyCount. length) {
return false
}
for ( const key in obj1) {
if ( obj1. hasOwnProperty ( key) ) {
const res = isEqual ( obj1[ key] , obj2[ key] )
if ( ! res) {
return false
}
}
}
return true
}
Object. isEqual ( obj1, obj2)
split和join的区别 split通过某个分隔符将字符串拆分为数组; join通过某个分隔符将数组组合成字符串 数组的push、pop、unshift、shift分别做了什么 pop:将数组最后一个元素弹出并返回 push:推送一个元素到数组并返回数组的长度 unshift:推送一个元素到数组头部并返回数组的长度 shift:将数组第一个元素弹出并返回 以上都会对原数组造成影响 以下输出什么:
var a = { "x" : 1 } ;
var b = a;
a. x = 2 ;
console. log ( b. x) ;
a = { "x" : 3 } ;
console. log ( b. x) ;
a. x = 4 ;
console. log ( b. x) ;
var a = { x: 1 }
var b = { y: 2 }
var c = { y: 3 }
a[ b] = b
a[ c] = c
console. log ( a[ b] , a[ c] )
数组slice和splice的区别 slice截取区间[start, end)之间的元素并返回(无副作用),默认end为数组长度、start为0 splice截取区间[start, start + deleteCount - 1]之间的元素并返回(有副作用),第三个参数为插入的元素 [10, 20, 30].map(parseInt)返回结果是什么 返回结果是[10, NaN, NaN]
知识点
纯函数 有对应类型的输入和对应类型的输出,并且不改变原数组。数组中的纯函数API有:concat
、map
、filter
、Array.from()
、slice
function pureFunc ( input) {
return input. concat ( [ 2 , 3 , 4 ] )
}
const arr = pureFunc ( [ 0 , 1 ] )
map和parseInt map参数为item和index,返回值为数组 parseInt参数为item和当前的基数,返回值为NaN或number parseInt基数为0时是十进制,没有1进制
[ 10 , 20 , 30 ] . map ( parseInt)
[ 10 , 20 , 30 ] . map ( ( item, index) => {
return parseInt ( item, index)
} )