1、请写出下面 JS 程序中几个 alert 的结果:
var a = 100;function fn() { alert(a); var a = 200; alert(a);}fn();alert(a);var a;alert(a);var a = 300;alert(a);
自己去控制台敲敲就知道了哈
2、请写出以下程序的输出
var obj1 = {name: 'obj1', fn: function() { document.write(this.name);}};var obj2 = {name: 'obj2'};var obj3 = {name: 'obj3'};obj1.fn();var newFn = obj1.fn;newFn();newFn.call(obj2);obj3.fn = newFn;obj3.fn();
自己去控制台敲敲就知道了哈
3、一个数组 par 中存放有多个人员的信息,每个人员的信息由年龄 age 和姓名 name 组成,如{age: 2, name: 'xx'}。请写一段 JS 程序,对这个数组按年龄从小到大进行排序。
我这边如下实现:
function parSort(par) { return par.sort(function(arr1, arr2) { return arr1.age > arr2.age ? -1 : 1; });}
4、有字符串 var = 'abc345efgabcab',请写出 3 条 JS 语句分别实现如下 3 个功能:
1)去掉字符串中的a、b、c 字符,形成结果:'345efg'2)将字符串中的数字用中括号括起来,形成结果:'abc3[5]efgabcab'3)将字符串中的每个数字的值分别乘以 2,形成结果:'abc6810efgabcab'我这边如下实现:
// 1)str.replace(/([a-c])/g, '');// 2)str.replace(/(\d)/g, '[$1]');// 3)str.replace(/(\d)/g, function(num) {return num*2;});
5、请写一段 JS 程序类,定义一个列表类List,该类包含两个成员:属性 length(表示列表中的元素个数)和方法 add (像列表中添加元素),其中要求构造函数和 add 方法的参数为动态参数。
我这边如下实现:
function List() { this['_data'] = []; for (var ele in arguments) { this._data.push(arguments[ele]); } this.length = this._data.length;}List.prototype = { construct: List, add: function() { for (var ele in arguments) { this._data.push(arguments[ele]); } this.length = this._data.length; }}
6、请问以前 JS 程序有什么问题?应该如何优化?
function setStyle(element) { element.style.fontWeight = "bold"; element.style.textDecoration = "none"; element.style.color = "#000000";}
我这边优化如下:
function setStyle(element) { if (!element.style) { return; } var eleStyle = element.style; eleStyle.fontWeight = "bold"; eleStyle.textDecoration = "none"; eleStyle.color = "#000000";}
7、请写出一下正则表达式:
1)匹配一个全部是数字的字符串2)提取一个 url 所使用的协议类型如 http、ftp 和 host 名称我这边实现如下:
// 1)var str = '1234';/^\d+$/.test(str);// 2)var str = 'http://yangbai.me';str.match(/(([a-zA-Z]{3,5})\:\/\/)?(www\.)?([a-zA-Z\_\-]+)\.([a-zA-Z]+)$/);
8、请使用闭包的方式,写一段 JS 程序实现如下功能:函数每调用一次则该函数的返回值加 1。
我这边如下实现:
function A() { var count = 0; function B() { count++; return count; } return B;}var plus = A();//A中的count会一直停留在内存中。。。plus();// 0plus(); // 1plus(); // 2
9、请写出下面 JS 程序中几个 document.write 的结果:
function Parent() { this.a = 1; this.b = [1, 2, this.a]; this.c = {demo: 5}; this.show = function() { document.write(this.a + ' ' + this.c.demo + ':' + this.b + '') }}function Child() { this.a = 2; this.change = function() { this.b.push(this.a); this.a = this.b.length; this.c.demo = this.a++; }}Child.prototype = new Parent();var parent = new Parent();var child1 = new Child();var child2 = new Child();child1.a = 11;child2.a = 12;parent.show();child1.show();child2.show();child1.change();child2.change();parent.show();child1.show();child2.show();
我这边打印如下:
1 5:1,2,1
11 5:1,2,112 5:1,2,11 5:1,2,15 5:1,2,1,11,126 5:1,2,1,11,12
10、请简述对 MVC 的理解,并列举一些 MVC 架构的 js 框架。
来吧,各抒己见......
11、请用 js 程序实现二分算法。
我这边如下实现:
/** * 简单二分查找实现【数组必须有序】 * @param {[type]} arr [description] * @param {[type]} num [description] * @param {[type]} start [description] * @param {[type]} end [description] * @return {[type]} [description] */function binaryFind(arr, num, start, end) { start = start || 0; end = end || arr.length; var mid = Math.floor((start + end) / 2); var midVal = arr[mid]; if (start >= end) { return false; } if (midVal === num) { return 'arr[' + mid + '] = ' + midVal; } else { if (midVal > num) { return binaryFind(arr, num, 0, mid); } else { return binaryFind(arr, num, mid+1); } }}
12、有这样一个 URL:,请写一段 JS 程序提取 URL 中的各个参数(参数名和参数个数不确定),将其按 key-value 形式返回到一个 json 结构中,如{a:'1',b:'2',c:'',d:'xxx',e:undefined}。
我这边实现如下:
/** * 解析url参数为对象 * @param {[type]} url [description] * @return {[type]} [description] */function parseUrl(url) { url = url.toString(); var ret = {}; var urlArr = url.split('?'); if (urlArr.length < 2) { return ret; } var paramsArr = urlArr[1].split('&'); var len = paramsArr.length; for (var i=0; i1 ? arr[1] : undefined; } return ret;}
13、XSS 原理是什么?怎么防范呢?请写一个攻击和防御的例子。CSRF 和 hash 碰撞的原理是什么。怎么防范。
来吧,各抒己见......
14、请列举前端可以采取的常见优化方式
来吧,各抒己见......
15、请列举你所了解的跨域实现方法
来吧,各抒己见......