前端面试题精选(3)

十八、date内置对象常用的方法都有哪些?

1、获取年:getFullYear()

2、获取月:getMonth() ,只获得 (0-11),用该方法时需+1

3、获取日:getDate()

4、获取小时:getHours()

5、获取分钟:getMinutes()

6、获取秒:getSeconds()

7、获取周的某一天(0~6),其中0是星期天,getDay()

十九、场景题,arr1=[1,2,3] arr2=[4,5,6],合并数组1,并且取到新数组的第二个元素

1、arr1.concat(arr2).slice(1,1)

扩展,数组方法整理:

1.1:join(),把数组切割成字符串

  var arr = [1, 2, 3, 4, 5];
    document.write(arr.join('-')); //输出:1-2-3-4-5

1.2:sort(),

1.2.1对数组进行排序和升序

var arr = [5, 4, 6, 3, 2];
    arr.sort(function (a, b) {
        return a - b;
    })
    document.write(arr); //6,5,4,3,2

1.2:sort(),

1.2.1对数组进行排序和升序

 var arr = [5, 4, 6, 3, 2];
    arr.sort(function (a, b) {
        return a - b;
    })
    document.write(arr); //6,5,4,3,2

1.2.2、对数组进行排序,降序

var arr = [5, 4, 6, 3, 2];
    arr.sort(function (a, b) {
        return b - a;
    })
    document.write(arr); //6,5,4,3,2

1.3:push()、向数组末尾添加一个或多个新的元素,并自动更新数组长度。

 var arr = [1, 2, 3, 4, 5, 6, 7, 8];
    arr.push(11, 12, 13, 14, 15);
    document.write(arr); //显示:1,2,3,4,5,6,7,8,11,12,13,14,15

1.4:合并两个数组,把两个数组合并起来

var arr1 = [1, 2, 3, 4];
    var arr2 = [5, 6, 7, 8];
    var arr1 = arr1.concat(arr2);
    document.write(arr1); //输出:1,2,3,4,5,6,7,8

1.5:splice

语法:数组名.splice(a,b); a从哪里(下标)开始删除,b删除几个。

1.6:数组反转

语法:数组名.reverse()

二十、bom常用的4个对象

1、screen,屏幕对象

2、navigator ,浏览器对象

3、history 历史对象

4、location 地址对象

二十一、使用正则表达式清除空的字符串

 var reg = /^\s$/g;
    reg.test(str)

二十二、js创建对象的几种方式

// js创建对象的几种方式:

    // 1、基于Object的方式创建对象

    var user = new Object();
    user.name = '张三';
    user.age = 18;
    user.show = function () {
        document.write(this.name + ':' + this.age)
    }
    user.show(); // 张三:18

    // 2、使用对象字面量来创建对象
    var user = {
        name: '张三',
        age: 18,
        show: function () {
            document.write(this.name + ':' + this.age)
        }
    }
    user.show(); // 张三:18

    // 3、使用工厂模式创建对象

    function creatUser(name, age, address, job) { // 实例对象
        var user = new Object();
        user.name = name;
        user.age = age;
        user.address = address;
        user.job = job;
        user.show = function () {
            var str = '姓名:' + user.name + '<br>' + '年龄:' + user.age + '<br>' + '工作:' + user.job + '<br>' + '地址:' +
                this
                .address;
            document.write(str);
        }
        return user;
    }
    var user1 = creatUser('张三', 18, '旅游博主', '家里蹲'); // 原型对象
    user1.show();
    console.log(user1 instanceof creatUser); //false //使用该方式看原型对象与实例对象的关系

    // 4、使用构造构造函数来创建对象(大写)
    function CreatUser(name, age, address, job) { // 实例对象
        this.name = name;
        this.age = age;
        this.address = address;
        this.job = job;
        this.show = function () {
            var str = '姓名:' + this.name + '<br>' + '年龄:' + this.age + '<br>' + '工作:' + this.job + '<br>' + '地址:' +
                this.address;
            document.write(str);
        }
    }
    var user1 = new CreatUser('张三', 18, '旅游博主', '家里蹲'); // 原型对象
    user1.show();
    console.log(user1 instanceof CreatUser); //true  //使用该方式看原型对象与实例对象的关系

二十三、哪些操作方式会造成内存泄漏

1、内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。

问:什么是js的垃圾回收机制?

答:垃圾回收机制(GC:Garbage Collection):执行环境负责管理代码执行过程中使用的内存。JS的垃圾回收机制是为了以防内存泄漏,内存泄漏的含义就是当已经不需要某块内存时这块内存还存在着,没有被释放,导致该内存无法被使用,垃圾回收机制就是间歇的不定期的寻找到不再使用的变量,并释放掉它们所指向的内存。

具体的方式:

1. setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。

2. 闭包

3. 控制台日志

4. 循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)

5、全局变量引起的内存泄露

6、dom清空或删除时,事件未清除导致的内存泄漏

二十四、请说一下什么是jsonp,以及jsonp的原理是什么

1、jsonp就是利用script标签的跨域能力请求资源

2、Jsonp 实现思路:

2.1 全称是 JSON with Padding,请求时通过动态创建一个 Script,在 Script 中发出请求,

2.2 通过这种变通的方式让请求资源可以跨域。

2.3 它不是一个官方协议,是一个约定,约定请求的参数里面如果包含指定的参数(默认是 callback),就说明是一个 JSONP 请求,服务器发现是 JSONP 请求,就会把原来的返回对象变成 JS 代码。

2.4 JS 代码是函数调用的形式,它的函数名是 callback 的值,它的函数的参数就是原来需要返回的结果。

2.5 后台会把函数调用,重新返回给前端。

二十五、请说下什么是本地对象、内置对象、宿主对象

1、本地对象:本地自己创建的变量,对象

2、内置对象:date,array,object,math

3、宿主对象:window、document等

二十六、请简单写一下闭包函数

1、闭包就是能够读取其他函数内部变量的函数。

//闭包(保护里面的变量不被污染)
    function fn() {
        var num = 0;
        return function () {
            num++;
            console.log(num);
            undefined
        }
    }
    var fn1 = fn()
    fn1() // 1
    fn1() //2

    // 对于js函数闭包的理解:
    function zs() { // 整个函数体都是闭包。
        var sum = '祖母绿宝石戒指'; // 定义的局部变量
        return function () { // return 让这个 子函数叛变,并拿到这个函数叛变的 return 的结果。
            return sum;
        }
    }
    // console.log(zs) //打印zs整个函数体。
    // console.log(zs()) //打印 zs return的函数
    var xzs = zs(); //将zs return的函数赋值给一个新的变量 xzs ,这个时候定义了一个匿名函数。
    var jz = xzs(); // 拿到xzs return的结果
    console.log(jz) // 打印 xzs 将return 的结果赋值给jz的结果

    // 对js函数闭包的释放理解。
    function fn() {
        var x = 100;
        return function () { //匿名函数
            console.log(x)
            // return x;
        }
    }
    console.log(fn()) //打印fn return的一个结果。
    var fn1 = fn(); //声明一个变量,将fn()return的结果赋值给变量 fn1
    fn1() // 执行fn1()打印的结果为100;
    console.log(fn1()); //执行fn1()打印以及return的结果为100,100;
    fn() == null //将该闭包函数进行释放,
    fn1()
    console.log(fn())
    console.log(fn1 = null)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值