# 2020 / 3 / 21

自结题

# 1 / 什么是 'use strict'? 使用它的好处和坏处分别是什么?

ECMAScript5 添加了第二种运行模式:严格模式。顾名思义,这种模式使得Javascript在更严格的条件下运行

设立严格模式的目的,主要有以下几个:

  • 消除Javascript语法的一些不合理,不严谨之处,减少一些怪异行为
  • 消除代码运行的一些不安全之处,保证代码运行的安全
  • 提高编译器效率。增加运行速度
  • 为未来新版本的Javascript做好铺垫

缺点:现在的网站的Js都会进行压缩,一些文件用了严格模式,而另一些没有。这时这些本来是严格模式的文件,被合并后,这个串就到了文件的中间,不仅没有指示严格模式,反而在压缩后浪费了字节

# 2 / Flash、Ajax各自的优缺点,在使用中如何取舍?

  • Flash
    • Flash 适合处理多媒体,矢量图形,访问机器
    • 对Css,处理文本上不足,不容易被搜索
  • Ajax
    • Ajax对Css,文本支持很好,支持搜索
    • 多媒体,矢量图形,机器访问不足
  • 共同点:
    • 与服务器的无刷新传递消息
    • 可以检测用户离线和在线状态
    • 操作DOM

# 3 / 请实现Javascript中的indexOf功能,判断一个字符串a中是否包含另一个字符串b

  • 如果包含,需要返回匹配字符串b的位置
  • 如果不包含,需要返回-1
function indexOf(str, subStr){
    var result = str.match(subStr)
    return result ? result.index : -1
}
1
2
3
4

# 4 / 请给Array本地对象添加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组

Array.prototype.distinct = function(){
    var result = []

    for(var i = 0; i < this.length; i++){
        for(var j = i + 1; j < this.length ;){
            if(this[i] === this[j]){
                result.push(this.splice(j, 1)[0])
            }else{
                j++
            }
        }
    }

    return result
}

alert(['a','b','c','d','b','a','e'].distinct())
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 5 / 请编写一个通用的事件处理函数

function addEvent(element, type, handler){
    if(element.addEventListener){
        element.addEventListener(type, handler, false)
    }else if(element.attachEvent){
        element.attachEvent('on' + type, handler)
    }else{
        element['on' + type] = handler
    }
}
1
2
3
4
5
6
7
8
9

# 6 / 请编写一段Js脚本生成下面这段Dom结构(使用标准的Dom方法或属性)

<div id='example'>
    <p class='slogan'>淘你喜欢</p>
</div>
1
2
3

Js实现:

window.onload = function(){
    var div = document.createElement('div')
    div.id = 'example'
    var p = document.createElement('p')
    p.className = 'slogan'
    p.innerHTML = '淘!你喜欢'
    div.appendChild(p)
    document.body.appendChild(div)
}
1
2
3
4
5
6
7
8
9