zoukankan      html  css  js  c++  java
  • 金s办公软件web前端笔试题

    1.

        var arr = [];
        arr['a'] = 1;
        console.log(arr.length); // A
        arr['4'] = 2;
        console.log(arr.length); // B
        arr.length = 0;
        console.log(arr) // C

    A、B、C分别输出什么?

    运行结果如下:

        var arr = [];
        arr['a'] = 1;
        console.log(arr); // [a: 1]
        console.log(arr.length); // 0
        arr['4'] = 2;
        console.log(arr) // (5) [empty × 4, 2, a: 1]
        console.log(arr.length); // 5
        arr.length = 0;
        console.log(arr) // [a: 1]
        console.log(arr.length); // 0

    所以A为0,B为5,C为[a:1]

    2.

    for(var i=0; i < 5; i ++) {
        // 在此处编写代码
        // 每隔一秒按顺序输出i值
    }

    解法:

        for (var i = 0; i < 5; i++) {
            // 在此处编写代码
            // 每隔一秒按顺序输出i值
            (function(i) {
                setTimeout(() => {
                    console.log(i)
                }, 1000 * i)
            })(i)
        }

    这道题如果没有限定给出给定的代码,还可以根据ES6块级作用域的知识把for循环中的var改成let,或者用Promise

        var arr = []
        var output = (i) => new Promise(resolve => {
            setTimeout(() => {
                console.log(i);
                resolve()
            }, 1000 * i)
        });
        for (var i = 0; i < 5; i++) {
            arr.push(output(i))
        };

    3.有如下代码:

        var f = function g() {
            return 23;
        };
        typeof g()

    运行结果是:

    报错

    (扩展:如果题目中typeof f === 'function', typeof f() === 'number')

    4.有如下代码:

        function showCase(value) {
            switch (value) {
                case 'A':
                    console.log(1);
                    break;
                case 'string':
                    console.log(2);
                    break;
                case undefined:
                    console.log(3);
                    break;
                case 'undefined':
                    console.log(4);
                    break;
                default:
                    console.log(5)
            }
        }
        showCase(new String('A'))

    运行结果是:

    5

    (扩展:console.log(new String('A')) => String {"A"})

    5.请用JavaScript实现map的数据结构,要求数据只能通过map提供的接口进行访问。

    解析:

    map的数据结构方法有

    属性/方法              作用
    size属性               size属性返回 Map 结构的成员总数。
    set(key, value)       set方法设置键名key对应的键值为value,然后返回整个 Map 结构。如果key已经有值,则键值会被更新,否则就新生成该键。set方法返回的是当前的Map对象,因此可以采用链式写法。
    get(key)              get方法读取key对应的键值,如果找不到key,返回undefined。
    has(key)              has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。
    delete(key)           delete方法删除某个键,返回true。如果删除失败,返回false。
    clear()               clear方法清除所有成员,没有返回值。

    参考:

        function MyMap() {
            this.map = new Object();
            this.length = 0;
    
            this.size = function() {
                return this.length;
            }
    
            this.set = function(key, value) {
                if (!this.map[key]) {
                    ++this.length;
                }
                this.map[key] = value;
            }
            this.get = function(key) {
                return this.map[key] ? this.map[key] : undefined;
            }
            this.has = function(key) {
                return this.map[key] ? true : false;
            }
            this.delete = function(key) {
                if (this.map[key]) {
                    --this.length;
                    delete this.map[key];
                    return true;
                } else {
                    return false;
                }
            }
    
            this.clear = function() {
                this.map = new Object();
                this.length = 0;
            }
    
        }

    6.给定一个排好序的整数数组,判断其中是否存在两个数之和等于指定的值,时间复杂度最好能达到O(n)。(例如:[1,2,3,4,5,9],指定值为12,结果为true)

        var twoSum = function(nums, target) {
            var arr = {};
            for (var i = 0; i < nums.length; i++) {
                if (typeof(arr[nums[i]] !== "undefined")) {
                    return true
                } 
                arr[target - nums[i]] = i
            }
        }
  • 相关阅读:
    reservoid sample 蓄水池问题
    发展中的生命力——Leo鉴书69
    Nagios 监控mysqlserver具体实现过程
    OC可变參数的函数实现va_start、va_end、va_list的使用
    Qt移动应用开发(八):实现跨平台的QML和OpenGL混合渲染
    一个简单RPC框架是怎样炼成的(V)——引入传输层
    Spark编程指南V1.4.0(翻译)
    [Scala随用随学] —— sealed声明的作用
    《快学Scala》第八章 继承
    《快学Scala》第六章 对象 第七章 包和引入
  • 原文地址:https://www.cnblogs.com/lhh520/p/10323044.html
Copyright © 2011-2022 走看看