各大互联网商家前端面试题

1
2
3
4
5
6
7
<span style="font-family: verdana, geneva;">if(typeof Array.isArray==="undefined")
{
  Array.isArray = function(arg){
        return Object.prototype.toString.call(arg)==="[object Array]"
    }; 
}
</span>

那就是说难点来了?假定一对兔子每月生一对兔子;一对新生兔,从第一个月起就起来生兔子;假定每对兔子都是一雌一雄,试问一对兔子,第n个月能繁殖成多少对兔子?(使用callee完毕)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
function setcookie(name, value, days) { //给cookie增加一个时间变量
      
    var exp = new Date();  
    exp.setTime(exp.getTime() + days * 24 * 60 * 60 * 1000); //设置过期时间为days天
      
    document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString();
}
 
function getCookie(name) {  
    var result = "";  
    var myCookie = "" + document.cookie + ";";  
    var searchName = "+name+" ";  
    var startOfCookie = myCookie.indexOf(searchName);  
    var endOfCookie;  
    if (satrtOfCookie != -1) {    
        startOfcookie += searchName.length;    
        endOfCookie = myCookie.indexOf(";", startOfCookie);    
        result = (myCookie.substring(startOfCookie, endOfCookie));  
    }  
    return result;
}
(function() {  
    var oTips = document.getElementById('tips'); //假设tips的id为tips
      
    var page = {  
        check: function() { //检查tips的cookie是否存在并且允许显示
                
            var tips = getCookie('tips');    
            if (!tips || tips == 'show') return true; //tips的cookie不存在
                
            if (tips == "never_show_again") return false;  
        },
          hideTip: function(bNever) {    
            if (bNever) setcookie('tips', 'never_show_again', 365);    
            oTips.style.display = "none"; //隐藏
              
        },
          showTip: function() {  
            oTips.style.display = "inline"; //显示,假设tips为行级元素
              
        },
          init: function() {    
            var _this = this;    
            if (this.check()) {    
                _this.showTip();    
                setcookie('tips''show', 1);  
            }  
            oTips.onclick = function() {    
                _this.hideTip(true);  
            };  
        }  
    };
    page.init();
})();

第四个空是:arguments
首个空是:/\{(\d+)\}/ig

1
2
3
<span style="font-family: verdana, geneva;">var a;
alert(typeof a); // undefined
alert(b); // 报错</span>

14.出口后天的日子,以YYYY-MM-DD的办法,比如明日是二零一四年五月26日,则输出2014-09-26

  • 艺术一.判断其是不是富有“数组性质”,如slice()方法。可协调给该变量定义slice方法,故有时会失效
  • 措施二.obj instanceof Array 在一些IE版本中不正确
  • 方法三.方法简单皆有尾巴,在ECMA
    Script5中定义了新办法Array.isArray(), 保险其包容性,最好的法门如下:

3)查找

函数表明与变量申明会被JavaScript引擎隐式地升级到当下作用域的顶部,可是只进步名称不会进步赋值部分。

 

答案:if(!foo) foo = bar; //若是foo存在,值不变,否则把bar的值赋给foo。

尚未标准答案。

1)平素在对象的原型上添加方法是还是不是平安?尤其是在Object对象上。(这些我没能答出?希望了然的说一下。) 

1
2
3
4
5
6
7
8
9
<span style="font-family: verdana, geneva;">function combo(msg){
    var arr = msg.split("-");
    var len = arr.length;    //将arr.length存储在一个局部变量可以提高for循环效率
    for(var i=1;i<len;i++){
        arr[i]=arr[i].charAt(0).toUpperCase()+arr[i].substr(1,arr[i].length-1);
    }
    msg=arr.join("");
    return msg;
}</span>

1)创造新节点

图片 1

  • “事件冒泡”:事件始于由最具体的因素接受,然后逐级向上传播
  • “事件捕捉”:事件由最不现实的节点先吸收,然后逐级向下,一贯到最切实的
  • “DOM事件流”:多少个级次:事件捕捉,目的阶段,事件冒泡

答案:”<tr><td>{id}</td><td>{id}</td><td>{id}_{$name}</td></tr>”.replace(/{\$id}/g, ’10’).replace(/{\$name}/g, ‘Tony’);

5.编纂一个JavaScript函数,输入指定项目标选拔器(仅需支撑id,class,tagName二种简单CSS选择器,无需协作组合选用器)可以回来匹配的DOM节点,需考虑浏览器兼容性和特性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// 方法一:
Object.prototype.clone = function() {
    var o = this.constructor === Array ? [] : {};
    for (var in this) {
        o[e] = typeof this[e] === "object" this[e].clone() : this[e];
    }
    return o;
}
 
//方法二:
/**
 * 克隆一个对象
 * @param Obj
 * @returns
 */
function clone(Obj) {
    var buf;
    if (Obj instanceof Array) {
        buf = []; //创建一个空的数组
        var i = Obj.length;
        while (i--) {
            buf[i] = clone(Obj[i]);
        }
        return buf;
    else if (Obj instanceof Object) {
        buf = {}; //创建一个空对象
        for (var in Obj) { //为这个对象添加新的属性
            buf[k] = clone(Obj[k]);
        }
        return buf;
    else //普通变量直接赋值
        return Obj;
    }
}

诠释:Undefined是一个唯有一个值的数据类型,这一个值就是“undefined”,在应用var申明变量但不曾对其赋值举行伊始化时,那个变量的值就是undefined。而b由于未评释将报错。注意未表明的变量和表明了未赋值的是差异等的。

答案是 1 和 undefined。

  • getElementsByTagName() //通过标签名称
  • getElementsByName() //通过元素的Name属性的值
  • getElementById() //通过元素Id,唯一性
1
2
3
4
5
6
7
8
9
10
Function.prototype.bind = Function.prototype.bind || function(context) {
    var self = this;
 
    return function() {
        return self.apply(context, arguments);
    };
}
 
var func = User.getCount.bind(User);
console.log(func());

  

  

  

   中级Javascript:

1
2
3
4
5
<span style="font-family: verdana, geneva;">var array1 = ['a','b','c'];
var bArray = ['d','e','f'];
var cArray = array1.concat(bArray);
cArray.splice(1,1);
</span>

6.当一个DOM节点被点击时候,大家盼望可以推行一个函数,应该怎么做?

11.原生JS的window.onload与Jquery的$(document).ready(function(){})有怎么着两样?怎么着用原生JS落成Jq的ready方法?

15.将字符串”<tr><td>{id}</td><td>{id}</td><td>{name}</td></tr>”中的{id}替换成10,{id}替换成10,{name}替换成托尼(使用正则表明式)

caller是回到一个对函数的引用,该函数调用了脚下函数;

Ajax的法则一句话来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数量,然后用javascript来操作DOM而立异页面。

1
2
<span style="font-family: verdana, geneva;">document.getElementById(“ID”).value
</span>

答案:alert(stringArray.join(” “))

  • 可以使得页面不重载全体内容的动静下加载局地内容,下降数据传输量
  • 幸免用户不断刷新或者跳转页面,提升用户体验

对于巩固复习js更是大有裨益。

1
var regMail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/;
  •  直接在DOM里绑定事件:<div onclick=”test()”></div>
  •  在JS里通过onclick绑定:xxx.onclick = test 
  •  通过事件添加举办绑定:add伊芙ntListener(xxx, ‘click’, test) 

7.怎么着是Ajax和JSON,它们的利害。

上述代码大概表述了ajax的长河,释义自行google,难点未完,那么明亮怎么是Jsonp和pjax吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function ready(fn){
    if(document.addEventListener) {        //标准浏览器
        document.addEventListener('DOMContentLoaded'function() {
            //注销事件, 避免反复触发
            document.removeEventListener('DOMContentLoaded',arguments.callee, false);
            fn();            //执行函数
        }, false);
    }else if(document.attachEvent) {        //IE
        document.attachEvent('onreadystatechange'function() {
            if(document.readyState == 'complete') {
                document.detachEvent('onreadystatechange', arguments.callee);
                fn();        //函数执行
            }
        });
    }
};

XMLHttpRequest是ajax的为主机制,它是在IE5中首先引入的,是一种协理异步请求的技能。简单来说,也就是javascript可以立时向服务器提议呼吁和处理响应,而不打断用户。达到无刷新的效益。

  

  上边不难包装一个函数:(略长,点击打开)  

 

  

callee是回到正在被执行的function函数,也就是所指定的function对象的正文。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//define
(function(window) {
    function fn(str) {
        this.str = str;
    }
 
    fn.prototype.format = function() {
        var arg = ______;
        return this.str.replace(_____, function(a, b) {
            return arg[b] || "";
        });
    }
    window.fn = fn;
})(window);
 
//use
(function() {
    var t = new fn('<p><a href="{0}">{1}</a><span>{2}</span></p>');
    console.log(t.format('http://www.alibaba.com''Alibaba''Welcome'));
})();

 

1
2
3
function log() {
    console.log.apply(console, arguments);
};

  

1
2
3
4
5
for(var i=1;i<=3;i++){
  setTimeout(function(){
      console.log(i);   
  },0); 
};

 

 

 

假如接第八题题干,大家要给每个log方法添加一个”(app)”前缀,比如’hello
world!’ ->'(app)hello world!’。方法如下:

 

伪数组(类数组):无法直接调用数组方法或期望length属性有哪些异样的表现,但仍能对确实数组遍历方法来遍历它们。典型的是函数的argument参数,还有像调用getElementsByTagName,document.childNodes之类的,它们都回去NodeList对象都属于伪数组。可以使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象。

答案:2(考察引用数据类型细节)

1
2
3
4
5
6
7
8
9
10
var User = {
    count: 1,
 
    getCount: function() {
        return this.count;
    }
};
console.log(User.getCount()); // what?
var func = User.getCount;
console.log(func()); // what?

16.上书原生Js完结ajax的规律。

优点:

13.var numberArray = [3,6,2,4,1,5]; (考察基础API)

引用数据类型:Object(Array,Date,RegExp,Function)

21.怎么着抬高、移除、移动、复制、成立和寻找节点(原生JS,实在基础,没细写每一步)

 

6.请评价以下代码并付出革新意见。

7.给String对象添加一个主意,传入一个string类型的参数,然后将string的每个字符间价格空格重临,例如:

8.看下列代码输出为啥?解释原因。

答案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<span style="font-family: verdana, geneva;">function escapeHtml(str) {
return str.replace(/[<>”&]/g, function(match) {
    switch (match) {
                   case “<”:
                      return “<”;
                   case “>”:
                      return “>”;
                   case “&”:
                      return “&”;
                   case “\””:
                      return “"”;
      }
  });
}
</span>

那么难题来了,怎么着保管Uesr总是能访问到func的上下文,即正确重返1

图片 2

图片 3

26.Javascript中callee和caller的作用?

9.看下列代码,输出什么?解释缘由。

2.哪些解除一个数组里面重复的元素?

 

13.

9.在Javascript中什么是伪数组?怎么样将伪数组转化为业内数组?

答案:

  1) 完结对该数组的倒排,输出[5,1,4,2,6,3]

25.写一个function,清除字符串前后的空格。(包容所有浏览器)

 status  
 从服务器再次来到的数字代码,比如大规模的404(未找到)和200(已就绪)

8.定义一个log方法,让它可以代办console.log的章程。

 

  

11.看代码给答案。

23.正则表达式构造函数var reg=new RegExp(“xxx”)与正则表明字面量var
reg=//有啥不一致?匹配邮箱的正则表明式?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var arr = [1, 2, 3, 3, 4, 4, 5, 5, 6, 1, 9, 3, 25, 4];
 
function deRepeat() {
    var newArr = [];
    var obj = {};
    var index = 0;
    var l = arr.length;
    for (var i = 0; i < l; i++) {
        if (obj[arr[i]] == undefined) {
            obj[arr[i]] = 1;
            newArr[index++] = arr[i];
        else if (obj[arr[i]] == 1)
            continue;
    }
    return newArr;
 
}
var newArr2 = deRepeat(arr);
alert(newArr2); //输出1,2,3,4,5,6,9,25
1
2
3
4
5
6
<span style="font-family: verdana, geneva;">var foo = 1;
function(){
    console.log(foo);
    var foo = 2;
    console.log(foo);
} </span>

  

addSpace(“hello world”) // -> ‘h e l l o  w o r l d’

1
2
3
4
5
6
7
8
9
for(var i=1;i<=3;i++){
   setTimeout((function(a){  //改成立即执行函数
       console.log(a);   
   })(i),0); 
};
 
1           //输出
2
3

 

  • 给需求拖拽的节点绑定mousedown, mousemove, mouseup事件
  • mousedown事件触发后,开首拖拽
  • mousemove时,须求经过event.clientX和clientY获取拖拽地方,并实时更新地方
  • mouseup时,拖拽截至
  • 亟需小心浏览器边界的情形

    

1
2
3
4
5
<ul id=”test”>
    <li>这是第一条</li>
    <li>这是第二条</li>
    <li>这是第三条</li>
</ul>

答案:

1
2
3
4
5
6
7
8
9
if (!String.prototype.trim) {
 String.prototype.trim = function() {
 return this.replace(/^\s+/, "").replace(/\s+$/,"");
 }
}
 
// test the function
var str = " \t\n test string ".trim();
alert(str == "test string"); // alerts "true"

XMLHttpRequest这些目标的品质有:

window.onload()方法是必须等到页面内包罗图形的有着因素加载已毕后才能执行。

 1     ajax({
 2         url: "./TestXHR.aspx",              //请求地址
 3         type: "POST",                       //请求方式
 4         data: { name: "super", age: 20 },        //请求参数
 5         dataType: "json",
 6         success: function (response, xml) {
 7             // 此处放成功后执行的代码
 8         },
 9         fail: function (status) {
10             // 此处放失败后执行的代码
11         }
12     });
13 
14     function ajax(options) {
15         options = options || {};
16         options.type = (options.type || "GET").toUpperCase();
17         options.dataType = options.dataType || "json";
18         var params = formatParams(options.data);
19 
20         //创建 - 非IE6 - 第一步
21         if (window.XMLHttpRequest) {
22             var xhr = new XMLHttpRequest();
23         } else { //IE6及其以下版本浏览器
24             var xhr = new ActiveXObject('Microsoft.XMLHTTP');
25         }
26 
27         //接收 - 第三步
28         xhr.onreadystatechange = function () {
29             if (xhr.readyState == 4) {
30                 var status = xhr.status;
31                 if (status >= 200 && status < 300) {
32                     options.success && options.success(xhr.responseText, xhr.responseXML);
33                 } else {
34                     options.fail && options.fail(status);
35                 }
36             }
37         }
38 
39         //连接 和 发送 - 第二步
40         if (options.type == "GET") {
41             xhr.open("GET", options.url + "?" + params, true);
42             xhr.send(null);
43         } else if (options.type == "POST") {
44             xhr.open("POST", options.url, true);
45             //设置表单提交时的内容类型
46             xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
47             xhr.send(params);
48         }
49     }
50     //格式化参数
51     function formatParams(data) {
52         var arr = [];
53         for (var name in data) {
54             arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[name]));
55         }
56         arr.push(("v=" + Math.random()).replace("."));
57         return arr.join("&");
58     }

答案:在Javscript中,解析器在向执行环境中加载数据时,对函数申明和函数表明式并非是不分厚薄的,解析器会首先读取函数扬言,并使其在推行别的代码此前可用(可以访问),至于函数表明式,则必须等到解析器执行到它所在的代码行,才会真正被分析执行。(函数申明进步)

1
2
3
4
5
6
7
8
9
function serilizeUrl(url) {
    var result = {};
    url = url.split("?")[1];
    var map = url.split("&");
    for(var i = 0, len = map.length; i < len; i++) {
        result[map[i].split("=")[0]] = map[i].split("=")[1];
    }
    return result;
}

17.foo = foo||bar ,那行代码是什么样看头?为啥要那样写?

答案:输出undefined 和 2。上边代码相当于:

那么难题来了,怎样判定某变量是不是为数组数据类型?

4.希望取获得页面中持有的checkbox怎么办?(不利用第三方框架)

 

20.把七个数组合并,并剔除第三个元素。

 

答案:正确的法子是应用Function.prototype.bind。包容各类浏览器完整代码如下:

评价:

1
2
3
4
5
6
7
8
9
10
11
12
if(window.addEventListener){
    var addListener = function(el,type,listener,useCapture){
        el.addEventListener(type,listener,useCapture);
  };
}
else if(document.all){
    addListener = function(el,type,listener){
        el.attachEvent("on"+type,function(){
          listener.apply(el);
      });
   
}

 

答复出概念即可,上面是多少个主旨

1
2
3
4
5
6
7
8
9
<span style="font-family: verdana, geneva;">var iArray = [];
funtion getRandom(istart, iend){
        var iChoice = istart - iend +1;
        return Math.floor(Math.random() * iChoice + istart;
}
for(var i=0; i<10; i++){
        iArray.push(getRandom(10,100));
}
iArray.sort();</span>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*
 * 传递函数给whenReady()
 * 当文档解析完毕且为操作准备就绪时,函数作为document的方法调用
 */
var whenReady = (function() { //这个函数返回whenReady()函数
    var funcs = []; //当获得事件时,要运行的函数
    var ready = false//当触发事件处理程序时,切换为true
 
    //当文档就绪时,调用事件处理程序
    function handler(e) {
        if (ready) return//确保事件处理程序只完整运行一次
 
        //如果发生onreadystatechange事件,但其状态不是complete的话,那么文档尚未准备好
        if (e.type === 'onreadystatechange' && document.readyState !== 'complete') {
            return;
        }
 
        //运行所有注册函数
        //注意每次都要计算funcs.length
        //以防这些函数的调用可能会导致注册更多的函数
        for (var i = 0; i < funcs.length; i++) {
            funcs[i].call(document);
        }
        //事件处理函数完整执行,切换ready状态, 并移除所有函数
        ready = true;
        funcs = null;
    }
    //为接收到的任何事件注册处理程序
    if (document.addEventListener) {
        document.addEventListener('DOMContentLoaded', handler, false);
        document.addEventListener('readystatechange', handler, false); //IE9+
        window.addEventListener('load', handler, false);
    else if (document.attachEvent) {
        document.attachEvent('onreadystatechange', handler);
        window.attachEvent('onload', handler);
    }
    //返回whenReady()函数
    return function whenReady(fn) {
        if (ready) {
            fn.call(document);
        else {
            funcs.push(fn);
        }
    }
})();

答案:(过长,点击打开)

那就是说难点来了,apply和call方法的异同?  

 

1
2
3
4
5
6
function log() {
    var args = Array.prototype.slice.call(arguments); //为了使用unshift数组方法,将argument转化为真正的数组
    args.unshift('(app)');
 
    console.log.apply(console, args);
};

随后上述答题,那么难题来了

 readyState    对象情形值

 

Ajax是异步JavaScript和XML,用于在Web页面中落到实处异步数据交互。

(考察基础API)

只要要传播三个参数呢?分明上边的点子无法满足必要,所以更好的主意是:

邮箱的正则匹配:

1
2
3
4
5
6
7
8
function Dog() {
       this.wow = function() {
               alert(’Wow’);
      }
       this.yelp = function() {
              this.wow();
      }
}

 

答案:当使用RegExp()构造函数的时候,不仅要求转义引号(即\”表示”),并且还亟需双反斜杠(即\\代表一个\)。运用正则表达字面量的成效更高。 

1
2
3
4
5
6
7
<span style="font-family: verdana, geneva;">var foo = 1;
function(){
    var foo;
    console.log(foo); //undefined
    foo = 2;
    console.log(foo); // 2;  
} </span>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var result=[];
function fn(n){  //典型的斐波那契数列
   if(n==1){
        return 1;
   }else if(n==2){
           return 1;
   }else{
        if(result[n]){
                return result[n];
        }else{
                //argument.callee()表示fn()
                result[n]=arguments.callee(n-1)+arguments.callee(n-2);
                return result[n];
        }
   }
}

pjax:pjax是一种基于ajax+history.pushState的新技巧,该技能可以无刷新改变页面的始末,并且可以变更页面的URL。(关键点:可以完毕ajax不能兑现的倒退效能)pjax是ajax+pushState的卷入,同时接济本地存储、动画等种种功能。近期支持jquery、qwrap、kissy等几种本子。

3.已知ID的Input输入框,希望赢得这一个输入框的输入值,咋办?(不行使第三方框架)

1
2
3
String.prototype.spacify = function() {
    return this.split('').join(' ');
};
1
2
3
4
5
6
7
8
9
10
11
12
<span style="font-family: verdana, geneva;">var d = new Date();
// 获取年,getFullYear()返回4位的数字
var year = d.getFullYear();
// 获取月,月份比较特殊,0是1月,11是12月
var month = d.getMonth() + 1;
// 变成两位
month = month < 10 ? '0' + month : month;
// 获取日
var day = d.getDate();
day = day < 10 ? '0' + day : day;
alert(year + '-' + month + '-' + day);
</span>

答案:

利用自带接口trim(),考虑包容性:

 

问两处 console 输出什么?为啥?

 onreadystatechang    每一次状态改变所接触事件的事件处理程序。

Ajax 的齐全是Asynchronous
JavaScript and XML,其中,Asynchronous 是异步的意味,它有别于传统web开发中行使的一起的主意。

答案:

图片 4 View Code

 

10.看下列代码,输出什么?解释缘由。

2.JavaScript的数据类型都有哪些?

1
2
3
4
function log(msg)  {
    console.log(msg);
}
log("hello world!"// hello world!

对于apply和call两者在功效上是一样的,即是调用一个对象的一个艺术,以另一个对象替换当前目的。将一个函数的靶子上下文从开首的上下文改变为由
thisObj 指定的新目的。

  •  0 (未起初化) 对象已成立,可是并未早先化(尚未调用open方法)
  •  1 (开端化) 对象已确立,尚未调用send方法

  •  2 (发送数据) send方法已调用,不过当前的动静及http头未知

  •  3
    (数据传送中) 已接受部分数据,因为响应及http头不全,那时通过responseBody和responseText获取部分数量会冒出错误,

  •  4
    (完毕) 数据接受完成,此时可以通过通过responseXml和responseText获取完整的答应数据

5.设置一个已知ID的DIV的html内容为xxxx,字体颜色设置为黄色(不行使第三方框架)

答案:

  

4.底下那几个ul,怎么样点击每一列的时候alert其index?(闭包)

 

  • 考察点1:对于着力数据类型和引用数据类型在内存中存放的是值依然指针这一分歧是不是通晓
  • 考察点2:是不是知情什么判断一个变量是何许品种的
  • 考察点3:递归算法的安插性

  

那么难点来了,已知有字符串foo=”get-element-by-id”,写一个function将其转化成驼峰表示法”getElementById”。

1
2
3
4
5
6
7
8
9
<span style="font-family: verdana, geneva;">var domList = document.getElementsByTagName(‘input’)
var checkBoxList = [];
var len = domList.length;  //缓存到局部变量
while (len--) {  //使用while的效率会比for循环更高
  if (domList[len].type == ‘checkbox’) {
      checkBoxList.push(domList[len]);
  }
}
</span>
1
2
3
4
5
6
<span style="font-family: verdana, geneva;">var numberArray = [3,6,2,4,1,5];
numberArray.reverse(); // 5,1,4,2,6,3
numberArray.sort(function(a,b){  //6,5,4,3,2,1
   return b-a;
})
</span>
1
2
3
<span style="font-family: verdana, geneva;">var foo = "11"+2+"1";    //体会加一个字符串'1' 和 减去一个字符串'1'的不同
console.log(foo);
console.log(typeof foo);</span>

举行完后foo的值为1121(此处是字符串拼接),foo的花色为String。

1
2
3
4
<span style="font-family: verdana, geneva;">var dom = document.getElementById(“ID”);
dom.innerHTML = “xxxx”;
dom.style.color = “#000”;
</span>
1
2
3
4
5
6
7
8
9
10
11
12
13
function addEvent(elem, type, handler) {  
    if (elem.addEventListener) {    
        elem.addEventListener(type, handler, false);  
    else if (elem.attachEvent) {    
        elem['temp' + type + handler] = handler;    
        elem[type + handler] = function() {    
            elem['temp' + type + handler].apply(elem);  
        };  
        elem.attachEvent('on' + type, elem[type + handler]); 
    else {  
        elem['on' + type] = handler;  
    }
}

 responseText    从服务器进度重回数据的字符串方式。

16.为了确保页面输出安全,大家平日索要对有些破例的字符举办转义,请写一个函数escapeHtml,将<, >, &, “举办转义

 

初稿出处:http://www.cnblogs.com/coco1s/p/4029708.html

 

改正如下: 

  

那就是说难题来了,Javascript的风浪流模型都有怎样?

1.落实一个函数clone,能够对JavaScript中的5种关键的数据类型(包蕴Number、String、Object、Array、Boolean)进行值复制

1
2
3
<span style="font-family: verdana, geneva;">var foo = "11"+2-"1";
console.log(foo);
console.log(typeof foo);</span>

   初级Javascript:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function MadDog() {
    this.yelp = function() {
          var self = this;         
          setInterval(function() {
                self.wow();     
          }, 500);
      }
}
MadDog.prototype = new Dog();        
 
//for test
var dog = new Dog();
dog.yelp();
var madDog = new MadDog();
madDog.yelp();

 

 

要是上述代码非常难懂,上面这几个简化版:

14.吐露以下函数的职能是?空白区域应该填写什么?

18.看下列代码,将会输出什么?(变量声明升高)

12.(设计题)想已毕一个对页面某个节点的牵引?咋办?(使用原生JS)

2)函数讲明与函数表达式的界别? 

3.小贤是一条可爱的小狗(Dog),它的喊叫声很中意(wow),每一回放到主人的时候就会乖乖叫一声(yelp)。从那段描述可以收获以下目的:

Jsonp:(JSON with Padding)是一种跨域请求方式。紧要原理是应用了script
标签可以跨域请求的特性,由其 src 属性发送请求到服务器,服务器再次回到 js
代码,网页端接受响应,然后就直接实施了,那和透过 script
标签引用外部文件的原理是均等的。JSONP由两局部构成:回调函数和数据,回调函数一般是由网页端控制,作为参数发往服务器端,服务器端把该函数和数目拼成字符串重回。

 

着力数据类型:String,Boolean,Number,Undefined, Null

  • appendChild() //添加
  • removeChild() //移除
  • replaceChild() //替换
  • insertBefore() //插入

 

 

可取:轻量级、易于人的翻阅和编排,便于机器(JavaScript)解析,支持复合数据类型(数组、对象、字符串、数字)

答案:4 4 4。

  • createDocumentFragment() //创造一个DOM片段
  • createElement() //成立一个切实可行的元素
  • createTextNode() //创制一个文书节点
1
2
3
<span style="font-family: verdana, geneva;">var a = null;
alert(typeof a); //object
</span>

由来:Javascript事件处理器在线程空闲之前不会运行。那么难点来了,何以让上述代码输出1
2 3?

举办完后foo的值为111,foo的花色为Number。

10.对功能域上下文和this的知情,看下列代码:

答案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 方法一:
var lis=document.getElementById('2223').getElementsByTagName('li');
for(var i=0;i<3;i++)
{
    lis[i].index=i;
    lis[i].onclick=function(){
        alert(this.index);
    };
}
 
//方法二:
var lis=document.getElementById('2223').getElementsByTagName('li');
for(var i=0;i<3;i++)
{
    lis[i].index=i;
    lis[i].onclick=(function(a){
        return function() {
            alert(a);
        }
    })(i);
}

2)添加、移除、替换、插入

 

func 是在 winodw 的上下文中被实施的,所以会造访不到 count 属性。

1
2
3
4
5
6
<span style="font-family: verdana, geneva;">var a = new Object();
a.value = 1;
b = a;
b.value = 2;
alert(a.value);
</span>

 status Text    伴随状态码的字符串新闻

15.用面向对象的Javascript来介绍一下要好。(没答案哦亲,自己尝试吧)

缺点:

但两者在参数上有区其余。对于第四个参数意义都一样,但对第三个参数: apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第一个参数开端)。 如
func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3])

答案: 对象或者Json都是科学的选取哦。

$(document).ready()是DOM结构绘制完成后就实施,不必等到加载完结。   

1.JavaScript是一门怎么的语言,它有如何特点?

答案:访函数的效能是使用format函数将函数的参数替换掉{0}那样的内容,重临一个格式化后的结果:

  • 不应当在if和else语句中声称addListener函数,应该先申明;
  • 不需求利用window.add伊芙ntListener或document.all来拓展检测浏览器,应该使用力量检测;
  • 是因为attach伊芙nt在IE中有this指向难题,所以调用它时索要处理一下

24.看上边代码,给出输出结果。

那么难题来了,看下边的代码,输出什么,foo的档次为啥?

  • 对寻找引擎不友善(
  • 要完毕ajax下的内外退成效开销较大
  • 或者导致请求数的充实
  • 跨域难题限制

12.已知数组var stringArray = [“This”, “is”, “Baidu”, “Campus”],Alert出”This is Baidu Campus”。

闭塞表明式:作为”&&”和”||”操作符的操作数表明式,那么些表达式在进展求值时,只要最终的结果已经可以规定是真或假,求值进程便告终止,这称为短路求值。

19.用js已毕自由选拔10–100里面的10个数字,存入一个数组,并排序。

  2) 达成对该数组的降序排列,输出[6,5,4,3,2,1]

22.有那样一个URL:http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e,请写一段JS程序提取URL中的各个GET参数(参数名和参数个数不确定),将其按key-value形式返回到一个json结构中,如{a:'1‘, b:’2′, c:”, d:’xxx’, e:undefined}。

实用的方式一:

JSON是一种轻量级的数据互换格式,ECMA的一个子集

解说:null是一个只有一个值的数据类型,那个值就是null。表示一个空指针对象,所以用typeof检测会回来”object”。

1
2
3
4
5
6
7
8
9
<span style="font-family: verdana, geneva;">var undefined;
undefined == null// true
1 == true;   // true
2 == true;   // false
0 == false;  // true
0 == '';     // true
NaN == NaN;  // false
[] == false// true
[] == ![];   // true</span>
  • undefined与null相等,但不恒等(===)

  • 一个是number一个是string时,会尝试将string转换为number

  • 尝试将boolean转换为number,0或1

  • 品味将Object转换成number或string,取决于此外一个对计量的品类

  • 就此,对于0、空字符串的论断,提议使用 “===” 。“===”会先判断两边的值类型,类型不匹配时为false。

 

 

小芒和小贤一样,原来也是一条可爱的小狗,可是突然有一天疯了(MadDog),一看到人就会每隔半秒叫一声(wow)地不停叫唤(yelp)。请依照描述,按示例的样式用代码来实。(继承,原型,setInterval)

 responseXML    从服务器进程重回的DOM包容的文档数据对象。

图片 5

相关文章