基础面试题分析

1.考察变量存储

let a = {
	n: 1
}
// 声明变量 a,开辟堆内存AAAFFFF0000 存储键值对 n: 1,将内存地址赋值给 a,将变量 a 与 堆内存关联
let b = a // AAAFFFF0000
// a.x = b 这种写法会造成堆的无限嵌套,引发内存溢出 
// 声明变量 b,与 堆内存关联
a.x = a = {
	n: 2
}
// (1) 拆分为 a.x = { n: 2 } 、 a = { n: 2 }
// (2) 此时 a.x 的 a 仍然关联旧的堆内存地址 AAAFFFF0000
// (3) 实际是给 AAAFFFF0000中添加了属性 x,并且赋值 { n: 2 }
// (4) a = { n: 2 } 开辟了新的堆内存并且创建了新的关联 AAAFFFF0001
console.log(a.x) // a.x undefined
console.log(b) // AAAFFFF0000 { n: 1, x: { n: 2 } }
融会贯通
let n = [10, 20]
let m = n
let x = m
m[0] = 100
x = [30, 40]
x[0] = 200
m = x
m [1] = 300
n[2] = 400
console.log(n, m, x)
// [100, 20, 400]
// [200, 300]
// [200, 300]

2.冒泡排序

const arr = [2, 5, 8, 6, 4, 1]
for (let i = 0; i < arr.length - 1; i++) {
	for (let j = i + 1; j < arr.length; j++) {
		if (arr[j] < arr[i]) {
			[arr[j], arr[i]] = [arr[i], arr[j]]
		}
	}
}
console.log(arr)
优化
const arr = [2, 5, 8, 6, 4, 1]
let len = arr.length
while(len--) {
	for (let i = 0; i < len; i++) {
		if (arr[i + 1] < arr[i]) {
			[arr[i + 1], arr[i]] = [arr[i], arr[i + 1]]
		}
	}
}
console.log(arr)

3.输出下列结果

var a = 'abc' + 123 + 456 // 'abc123456'
var b = '456' - '123' // 333
var c = 100 + true + 21.2 + null + undefined + "Tencent" + [] + null + 9 + false
// 'NaNTencentnull9false'
console.log(a, b, c) 
举一反三
// alert的结果是?
var str = 'abc123'
var num = parseInt(str)
if (num == NaN) {
	alert(NaN)
} else if (num == 123) {
	alert(123)
} else if (typeof num == 'number') {
	alert('number')
} else {
	alert('str')
}
// alert('number')
// 输出结果
var a = 0
var b = a
b++
alert(a) // 0
var o = {}
o.a = 0
var b = o
b.a = 10
alert(o.a) // 10
/// 输出对应结果
parseInt('') // NaN
Number('') // 0
isNaN('') // false
parseInt(null)// NaN
Number(null) // 0
isNaN(nul) // ReferenceError nul is undefined
parseInt('12px') // 12
Number('12px') // NaN
isNaN('12px') // true
// 输出以下结果
let x = [1, 2, 3]
let y = x
let z = [4, 5, 6]
y[0] = 10
y = z
z[1] = 20
x[2] = z = 30
console.log(x, y, z) // [10, 2, 30], [4, 20, 6], 30

考察for循环掌握

for (var i = 0; i < 10; i++){
	console.log(i) // 0
	break
}
console.log(i) // 0
/* ==================== 循环7次,最终 i = 5 ==================== */
for (var i = 1; i <= 10; i += 2) {
	if (i <= 5) {
		i++;
		continue;
	} else {
		i -= 2
		break
	}
	i--
	console.log(i)
}
console.log(i) // 5
/* ==================== 死循环,没有结果 ==================== */
for (var i = 3; i < 12; i++) {
	if (i < 3) {
		i++
		break
	}
	if (i > 9) {
		i += 2;
		continue
	}
	i--
}
console.log(i) // 

i++和++i的区别

let a = '10'
a == 10 ? a++ : a--
console.log(a) // 11
let b = '10'
switch(b) {
	case 10:
		b++;
		break;
	default:
		b--;
}
console.log(b) // 9
/* ==================== 输出计算结果 ==================== */
let i = 3
// 5 + 4 + 4 + 3 - 2 + 4 + 4 - 2
console.log(5 + (++i) + (i++) + 3 - 2 + (--i) + (i--) - 2) // 20
console.log(i) // 3

基础知识综合

!(!'Number(undefined)'); // true

isNaN(parseInt(new Date())) + Number([1]) + typeof undefined // '2undefined'

Boolean(Number('')) + !isNaN(Number(null)) + Boolean('parseInt([])') + typeof !(null) // '2boolean'

parseFloat('1.6px') + parseInt('1.2px') + typeof parseInt(null) // 2.6number

isNaN(Number(!!Number(parseInt('0.8')))) // false

console.log(1 + '2' + '2') // 122

!typeof parseFloat('0') // false

Number('') // 0

typeof 'parseInt(null)' + 12 + !!Number(NaN) // 'string12false'

!typeof (isNaN('')) + parseInt(NaN) // NaN

typeof !parseInt(null) + !isNaN(null) // booleantrue

处理跨域的方法

jsonp解决方案的底层原理
  • script标签引入第三方资源不存在跨域
  • 只支持get请求,安全性低,有缓存,大小限制
  • 使用回调函数接受响应数据
iframe解决跨域
  • window.name
  • document,domain
  • location.hash
  • post message
CORS跨域资源共享
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值