javascript笔试题(3)
来源:互联网 发布:rrt算法 编辑:程序博客网 时间:2024/05/21 17:59
做完这6道题,不得不感叹javascript的强大灵活了。
1.找出数字数组中最大的元素(使用Match.max函数)
var a = [111, 2, 6, 4, 22, 5, 99, 3]; console.log(Math.max.apply(null, a));
2.转化一个数字数组为function数组(每个function都弹出相应的数字)
var a = [111, 2, 6, 4, 22, 5, 99, 3];a = a.map(function (value) { return function () { return value; } }); console.log(a[2]());
map函数接受一个callback函数,创建一个新数组。这里创建的新数组赋值给了旧数组。
3.给object数组进行排序(排序条件是每个元素对象的属性个数)
var b = [ {a: 1, b: 2}, {a: 1, b: 2, c: 3, d: 5}, {a: 1}, {a: 1, b: 2, c: 3, d: 4} ]; //拓展count方法 Object.prototype.count = ( Object.prototype.hasOwnProperty('_count_') ? function () { return this._count_; } : function () { var p, count = 0; for (p in this) { if (this.hasOwnProperty(p)) { count++; } } return count; } ); function compare(obj1, obj2) { return obj1.count() - obj2.count(); } console.log(b.sort(compare));
这里使用了给Object扩展count方法的方式。
4.利用JavaScript打印出Fibonacci数(不使用全局变量)
function fibo(n) { var self = arguments.callee; return n < 2 ? n : (self(n - 1) + self(n - 2)); } console.log(fibo(6));
现在callee已经被最新的标准废除了
5.实现如下语法的功能:var a = (5).plus(3).minus(6);
Number.prototype.plus = function (a) { return this.valueOf() + a; } Number.prototype.minus = function (a) { return this.valueOf() - a; } var a = (5).plus(3).minus(6); console.log(a);
这不是实现jquery的链式调用吗。只要函数返回的是this这个调用对象就好了。
这里有个问题。MDN上关于Object的valueOf的解释是这样子的。
Object.prototype.valueOf()
o = new Object();myVar = o.valueOf(); // [object Object]
关于Number的valueOf返回的却是数字了。
Number.prototype.valueOf()
var numObj = new Number(10);console.log(typeof numObj); // objectvar num = numObj.valueOf();console.log(num); // 10console.log(typeof num); // number
所以这个题目捏,返回this也可以,返回this.valueOf也可以。反正this.valueOf指向的还是那个数字。
6.实现如下语法的功能:var a = add(2)(3)(4);
function add(x) { var sum = x; var fn = function (y) { sum += y; console.log('aaa'); return fn; }; fn.valueOf = fn.toString = function () { console.log('bbb'); return sum; }; return fn; } console.log(add(2)(4)); console.log(add(2)); console.log(add(3)(8)(9)); console.log(add(3)(8)(9)(10));
怎么实现可以一直不停地累加呢?
首先add内部返回了一个函数fn,fn里实现累加操作。通过闭包,实现了累加。
但是怎么输出sum呢?
这里巧妙的利用了函数的名字(a)和函数(a())的不同,给函数的名字也添加函数,让它实现输出。
var a = function () { return 'haha'; } a.valueOf = a.toString = function () { return 'heihei'; } console.log(a()); // haha console.log(a); // heiheihei
函数和函数的名字都带函数了,最后当然就可以输出sum啦。
0 0
- javascript笔试题(3)
- Javascript数据类型(笔试题)
- (摘录)javascript笔试题
- javascript笔试题(1)
- javascript笔试题(2)
- javascript笔试题(5)
- 最新JavaScript笔试题(含答案)
- javascript笔试题(4) js模板
- javascript笔试题(6) js 数组
- javascript笔试题(8) 继承
- 美团笔试题(JavaScript)
- 最新JavaScript笔试题(含答案)
- JavaScript笔试题(持续更新)
- JavaScript笔试题
- 关于一道javascript笔试题
- 简单的JavaScript笔试题
- javascript 必背笔试题
- 一道阿里笔试题-javascript
- 题目29
- 《DO圣堂刺客2》国服首测今天拉开
- 两种方法求解逆序对
- java内存区域理解-初步了解
- 三种静态查找的思路及具体实现
- javascript笔试题(3)
- Ceph剖析:数据分布之CRUSH算法与一致性Hash
- C 二级指针和三级指针的使用
- python 中 list 列表 的十种操作方法:添加,插入,弹出,删除,延长,运算,查找,排序,反转,采用递归函数深度遍历list
- 题目34
- MySQL中的一些常用的函数
- BZOJ3427: Poi2013 Bytecomputer
- Hdu-5289 Assignment (二分+RMQ || 单调队列)
- 题目50