JS小知识点

42 阅读4分钟

标题

前要

最近投了一个c厂(cvte)的实习,笔试部分给我整麻了,一是很久没看js部分,二是有一些点没有掌握好,因此对js进行一个复习。

c厂笔试总结

就简单说一下笔试都考了什么。两道编程题和20道选择题

1.promise选择题和编程题需要使用promise.all,我当时没有搞懂该怎么做那个编程题,题目需要我将一个传入的函数(可能是同步函数也可能是异步函数)执行,然后延时给定时间,重复给定次数的执行,直到执行成功返回,失败则将失败结果全部返回。

2.webpack的的插件,打包,loader等小知识点

3.css常用布局,属性。

4.js类型等

5.es6的一些特性等

6.问了一个rpc协议,这是我从来没看过了,考完之后立马就去看了。

还有一些题目,http啊什么的,挺全面的。反而是没有框架内容,可能对于实习岗,要求没这么高吧。

数字类型

JavaScript 中的数字类型number包含整数和浮点数,另外还有 2 个特殊的数字值:Infinity(比其他任何数字都大的数字)和 NaN(表示“Not A Number”概念)。

object

Function有原型prototype,而实例化后的对象有__proto__属性,指向原型对象

create方法是以传入对象作为原型创建新的对象。delete 可以删除对象上的attribute。

let a = { name: "syh" }

let c = Object.create(a)

console.log(c.name);
c.age = 13
console.log(c.age);  //13

delete c.name
// delete
console.log(c);
// after delete

console.log(c.__proto__.sex = "男");
// 等降于a.sex="男" 因为c的__proto__指向a
console.log(a);

// 以上是以Object.create创建对象的情况

原型与原型链

image.png

上图是对象和函数各自有的的属性,通过下面代码验证

// create object by function
function Fun(name) {
    this.name = name
    // 构造函数写法
    // class Fun {
    // constructor(name) {
    //     this.name = name;
    //     // 构造函数写法
    //    }
    // }
}

Fun.prototype.age = "12"

let fun = new Fun("syh")
// 生成实例,这是函数的一种特使的使用方法,用作构造函数,可以转换为es6的constructor写法
console.log(fun);  //  Fun { name: 'syh' }

console.log(fun.__proto__);   //{ age: '12' }
// 他是指向构造它的原型对象,也就是Fun.prototype
console.log(Fun.prototype);   //{ age: '12' }
// 获得函数的原型对象
console.log(Fun.__proto__);   //{}

// 往prototype上添加属性
Fun.prototype.sex = "男"
console.log(fun);                           //Fun { name: 'syh' }
console.log(`fun.sex can get ${fun.sex}`);  //fun.sex can get 男

// 各个对象的constructor
console.log(Fun.constructor);              //[Function: Function]
console.log(fun.constructor);              //[Function: Fun]
console.log(fun.constructor.constructor);  //[Function: Function]
console.log(fun.__proto__.constructor);    //[Function: Fun]
console.log(fun.__proto__.__proto__.constructor);    //[Function: Object]

// 如果更改constructor的话,对象上有constructor属性
fun.constructor = "cons"
console.log(fun);  //Fun { name: 'syh', constructor: 'cons' }
console.log(fun.constructor);    //cons
console.log(fun.__proto__.constructor);  //[Function: Fun]

结合constructor之后的图:

image.png

this

this指向调用它的那个对象,这句话就够了,因为js是万物皆对象。

let outThis = {
    sex: "syh",
    age: 18,
    inThis: function () {
        this.name = "tt"
        console.log(this.age, this.sex);
        console.log(this.name);
    },
    logName: function () {
        console.log("outThis - name is :" + this.name);
    }
}

outThis.inThis()
outThis.logName()
console.log(outThis);

// 输出
// 18 syh
// tt
// outThis - name is :tt
// {
//   sex: 'syh',
//   age: 18,
//   inThis: [Function: inThis],
//   logName: [Function: logName],
//   name: 'tt'
// }

let obj = {
    name: "syh",
    outNmae: () => {
        this.sex = 18;
        console.log(this.name);
        console.log(this.sex);
    }
}
obj.outNmae()
// undefined
// 18

可以看到,普通函数内的this就是调用函数的作用域的对象,最上层是window。

而箭头函数的this就是指向这个箭头函数作用域。

call,apply,bind

他们是函数身上特有的方法,能够将函数的内部函数体放到一个新的上下文去执行,使用:Function.call(obj)。

下面写的实现call,看懂下面的代码,基本上就能彻底搞懂call了。

Function.prototype._call = function (param) {
    var args = [...arguments].slice(1);
    //   将除了第一个参数以外的所有参数取出来
    param.fn = this;
    // 将传入的param定义一个属性fn保存this,
    // 根据this永远指向最后一次调用它的对象,可以知道这个this就是执行call方法的函数
    // 也就是下面的myCall

    console.log(param.age + param.sex);
    // 直接输出param.age和param.sex可以的得到18男

    const result = param.fn(...args);
    // 再执行mycall函数,并将参数传给mycall,那么fn函数体内的this九指向的param,也就可以读到age和sex

    delete param.fn;
    //   删除fn
    return result;
    // 将结果返回
};

let obj = {
    age: 18,
    sex: "男",
};

function myCall(arg) {
    console.log(this.age + "  " + this.sex + [...arguments]);
}

myCall._call(obj, 2, 3, 4);

array的方法

1、push()是用来在数组末端添加项,shift()在移除数组的第一个项。

2、pop()在数组末端移除项,unshift()在数组前端添加项。

根据代码分析

let arr = [1, 3, "4"]

arr.push("5")
console.log(arr);  //[ 1, 3, '4', '5' ]
// push压入,往数组末尾添加元素

arr.shift()
console.log(arr);  //[ 3, '4', '5' ]
// shift 移除数组第一个元素

arr.unshift("7")
console.log(arr);   //[ '7', 3, '4', '5' ]
// 与shift相反,则是往数组首部添加元素

arr.pop()
console.log(arr);  //[ '7', 3, '4' ]
// 弹出数组的最后一个元素,和push相反

可以将pop和push分为一类,对数组尾部添加删除,shift和unshift分为一类,对数组首部进行操作。

总结

本次文章复习了一些js的小知识点

结语

本次的文章到这里就结束啦!♥♥♥读者大大们认为写的不错的话点个赞再走哦 ♥♥♥

每天一个知识点,每天都在进步!♥♥