美文网首页
js 常见编程题

js 常见编程题

作者: WPeach | 来源:发表于2017-03-12 16:28 被阅读0次
  1. 写一个求和的函数sum,达到下面的效果
// Should equal 15
sum(1, 2, 3, 4, 5);
// Should equal 0
sum(5, null, -5);
// Should equal 10
sum('1.0', false, 1, true, 1, 'A', 1, 'B', 1, 'C', 1, 'D', 1,
  'E', 1, 'F', 1, 'G', 1);
// Should equal 0.3, not 0.30000000000000004
sum(0.1, 0.2);

实现:

function sum(){
    var result = 0;
    for( var i=0; i<arguments.length; i++){
        result += (!isNaN(arguments[i]))&&window.parseFloat(arguments[i])||0;
    }
    return result.toFixed(3)*1000/1000;
}

讲解:
parseFloat的结果要么为一个小数,要么为NaN,||运算如果前一个为真则不计算后一个,直接返回前一个表达式的值,如果是NaN则返回后一个表达式的值;
nResult.toFixed(3) * 1000 / 1000 这个是在做:保留三位小数,并且去掉末尾的0,最后一位会进行四舍五入。

  1. 写一个traverse函数,输出所有页面宽度和高度大于50像素的节点。
function traverse(){
    return Array.prototype.filter.call(document.querySelectorAll('body *'), function(node){
        return node.offsetWidth > 50 && node.offsetHeight > 50;
    });
}
  1. js常用设计模式的实现思路,单例,工厂,代理,装饰,观察者模式等
 // 1) 单例: 任意对象都是单例,无须特别处理

    var obj = {name: 'michaelqin', age: 30};

    // 2) 工厂: 就是同样形式参数返回不同的实例
    function Person() { this.name = 'Person1'; }
    function Animal() { this.name = 'Animal1'; }

    function Factory() {}
    Factory.prototype.getInstance = function(className) {
        return eval('new ' + className + '()');
    }

    var factory = new Factory();
    var obj1 = factory.getInstance('Person');
    var obj2 = factory.getInstance('Animal');
    console.log(obj1.name); // Person1
    console.log(obj2.name); // Animal1

    //3) 代理: 就是新建个类调用老类的接口,包一下
    function Person() { }
    Person.prototype.sayName = function() { console.log('michaelqin'); }
    Person.prototype.sayAge = function() { console.log(30); }

    function PersonProxy() {
        this.person = new Person();
        var that = this;
        this.callMethod = function(functionName) {
            console.log('before proxy:', functionName);
            that.person[functionName](); // 代理
            console.log('after proxy:', functionName);
        }
    }

    var pp = new PersonProxy();
    pp.callMethod('sayName'); // 代理调用Person的方法sayName()
    pp.callMethod('sayAge'); // 代理调用Person的方法sayAge()

    //4) 观察者: 就是事件模式,比如按钮的onclick这样的应用.
    function Publisher() {
        this.listeners = [];
    }
    Publisher.prototype = {
        'addListener': function(listener) {
            this.listeners.push(listener);
        },

        'removeListener': function(listener) {
            delete this.listeners[listener];
        },

        'notify': function(obj) {
            for(var i = 0; i < this.listeners.length; i++) {
                var listener = this.listeners[i];
                if (typeof listener !== 'undefined') {
                    listener.process(obj);
                }
            }
        }
    };

 // 发布者
    function Subscriber() {

    }
    Subscriber.prototype = {
        'process': function(obj) {
            console.log(obj);
        }
    }; 

   // 订阅者
    var publisher = new Publisher();
    publisher.addListener(new Subscriber());
    publisher.addListener(new Subscriber());
    publisher.notify({name: 'michaelqin', ageo: 30}); // 发布一个对象到所有订阅者
    publisher.notify('2 subscribers will both perform process'); // 发布一个字符串到所有订阅者

相关文章

  • 常见JS编程题

    1、查找数组中重复元素 方法1:创建一个新的临时数组来保存数组中已有的元素 方法2: 使用indexOf判断数组元...

  • js 常见编程题

    写一个求和的函数sum,达到下面的效果 实现: 讲解:parseFloat的结果要么为一个小数,要么为NaN,||...

  • js常见题

    https://www.cnblogs.com/cutenana/p/7398255.html

  • js常见题

    1.require 与 import 的区别 两者的加载方式不同、规范不同 第一、两者的加载方式不同, requi...

  • js编程题

    求一个数的百位,十位和个位的数字

  • JS编程题

    1. 写出下面这段代码的输出结果是? 输出结果 : 25 20 20 25 解析: 本题考点两个: 1, 作用域;...

  • css 常见编程题

    请写一个表格以及对应的CSS,使表格奇数行为白色背景,偶数行为灰色背景,鼠标移上去时为黄色背景。

  • 前端常见编程题

    CSS篇 垂直居中 方式一 方式二 方式三 方式四 方式五 方式六 水平居中 方式一 方式二 方式三 方式四 布局...

  • OJ常见编程题

    第一题:目的1、变量定义、初始化、赋值2、运算符和表达式3、输出语句System.out.println();1....

  • 玩点创意编程,发现另一个世界

    知识点 什么是创意编程 创意编程的应用领域 创意编程的常见工具 p5.js 简介 什么是创意编程 创意编程(Cre...

网友评论

      本文标题:js 常见编程题

      本文链接:https://www.haomeiwen.com/subject/wkztnttx.html