「这是我参与2022首次更文挑战的第16天,活动详情查看:2022首次更文挑战」
-
字符串对象中的substring函数和slice函数的区别?
相同点:
(1)substring与slice都是用于字符串截取
(2)都可以接受两个参数start和end,分别表示开始索引和结束索引位(不包含end位置)
不同的是:
(1)如果end<start
substring会将start和end交换;
而slice会直接返回空串,表示没截取到
(2)如果start或者end有负数
substring会把小于0的数,当成0来计算
而slice允许是负数,表示倒数第几位开始或结束 -
下面代码的执行结果是什么?
Object.prototype.a = 1;
var obj = {
b:2
}
for(var i in obj){
console.log(obj[i])
}
答案:2 1
解析:for in循环中,会先变量obj自身属性的key,然后再去变量原型上的属性
- 下面代码的执行结果是什么?
var name = 'Alice';
var obj = {
name:'Tom',
getName:function(){
return function(){
return this.name
}
}
}
console.log(obj.getName()())
答案:Alice
解析:谁调用this指向谁,obj.getName()执行时this指向obj,而执行完后返回一个function,这个function执行时没人调用,所以里面this指向window,最后输出window上的name
- 下面代码的执行结果是?
var obj = {
val: 2,
del: function () {
this.val *= 2;
console.log(val)
}
}
obj.del()
答案:1
解析:我们知道执行obj.del()之后,obj.val变成了4,但是需要注意val找变量的时候,会沿着作用域查找,会找到外面被声明的的val,而非obj对象上的。
- 下面代码的执行结果是什么
**
var name = 'Alice';
(function(){
if(name === 'undefined'){
var name = 'Tom'
console.log(name)
}else{
console.log(name)
}
})()
答案:Tom
解析:立即函数执行时,由于if语句中有声明name,所以在预编译的时候会将name提升,并且值为undefined,所以打印Tom
- 下面代码的执行结果是什么
**
var name = 'Alice'
(function(){
if(name === 'undefined'){
var name = 'Tom'
console.log(name)
}else{
console.log(name)
}
})()
答案: Uncaught TypeError: "Alice" is not a function
解析:由于'alice'后面没有结束符号,下面跟着(),便以为是函数。导致结果报错
7。 什么是 WebSocket
WebSocket是 HTML5 中的协议,支持持久连续,http 协议不支持持久性连接。Http1.0和HTTP1.1都不支持持久性的链接,HTTP1.1中的 keep-alive,将多个 http 请求合并为1个