面试题(十)

来源:互联网 发布:文字特效制作软件 编辑:程序博客网 时间:2024/06/05 00:56

字符串的替换问题

var str = 'my name is {$name}, I like {$hobby}';var obj = {name: '小红', hobby: '看电影'};//输出 my name is 小红, I like 看电影

答案

str.replace(/{\$(\w+)}/g, function(match, p1){    return obj[p1];})

结果

这里写图片描述

讨论

  1. $符需要转义
  2. 要添加g,使其全局匹配而不是只匹配一次
  3. /正则表达式/

new冲突

完善下面代码已保证代码可以正确运行

function ArrayLike(){    this.length = 0;}//补充codevar arr = new ArrayLike();console.log(arr.length); //0arr.push(5);console.log(arr.length); //1console.log(arr[0]); // 5

答案

解决方法有二

第一种方式function ArrayLike(){    this.length = 0;    return new Array();}第二种方式ArrayLike.prototype = new Array();

讨论

  1. 第一种方式呢是直接返回一个Array实例。尽管new会返回一个对象,但是Array实例会覆盖他。
  2. 第二种方式则是让ArrayLike继承Array,这样其实例就可以拥有Array的方法了。

优化代码问题

var divs = document.getElementsByTagName('div');for(var i = 0; i < divs.length; i++) {    if(document.addEventListener) {        divs[i].addEventListener('click', function(){            console.log('div');        })    } else if(document.attachEvent){        divs[i].attachEvent('onclick', function(){            console.log('div');        })    }}
  • addEventListener为DOM2,attachEvent为IE,需要添加DOM0的
divs[i]['onclick'] = function(){}
  • 判断divs是否合法
if(divs!=null)
  • 每次都读取divs的长度,将其保存在变量中
var length = divs.length

欢迎补充~~

0 0
原创粉丝点击