element js 包含字符_JS基础知识(覆盖JS基础面试题)

总结一些前端基础的知识,有些知识可能在前端面试的时候会问到,所以做个记录,也有助于其他人查看,如果有什么问题,可以指出,会积极修正。

变量类型和计算

JS中typeof的类型有哪些

    console.log(typeof undefined);  //undefined    console.log(typeof 123);  //number    console.log(typeof '123');  //string    console.log(typeof true); //boolean    console.log(typeof [1,2,3]);  //object    console.log(typeof {"id": 11}); //object    console.log(typeof null); //object    console.log(typeof console.log);  //function

类型转换

  • 显式类型转换

    • NaN

    • null

    • undefined

    • 0

    • ""

    • false

    • 数字:转换成对应的字符串

    • 字符串:还是对应的字符串

    • 布尔值:true为'true',false为'false'

    • undefined:undefined

    • null:null

    • object:先执行toString,看是否能转换,如果不可以再执行valueOf,看是否可以转换,如果不可以报错

    • 数字:转换后还是数字

    • 字符串:如果可以被解析为数值,则为相应的数值,如果不能,则是 NaN,如果是空字符串那就是0

    • 布尔值:true为1,false为0

    • undefined:NaN

    • null:0

    • object:先执行valueOf,看是否能转换,如果不可以再执行toString,看是否可以转换,如果不可以报错

    • Number 函数

    • String 函数

    • Boolean下面这几个是false,其他都是true

  • 隐式类型转换

    • 四则运算

    • 判断语句

  • 奇葩的类型转换面试题

    bcd8c5b531808685e11d38dfd5715db9.png

    何时使用==,何时使用===

    除了obj.a == null以外,都用=====要用的时候一定要是已经定义的obj.a == null 转换之后其实是 obj.a == null || obj.a == undefined

    JS中有哪些内置函数

    Object    Array    Boolean    Number    String    Function    Date    RegExp    Error

JS变量按照存储方式有哪些类型

  • 1.值类型

  • 2.引用类型(节省空间,公用内存块)

区别:值类型改变一个不会影响其他的,引用类型改变都改变,因为公用内存块

如何理解JSON

JSON是JS的一个对象,也是一种数据格式,JSON中的两个api如下

  1. 将JSON字符串转换成JSON对象 JSON.parse()

  2. 将JSON对象转换成JSON字符串 JSON.stringify()

使用Object.prototype.toString获取一个对象的类型

var toString = Object.prototype.toString;toString.call(new Date); // [object Date]toString.call(new String); // [object String]toString.call(Math); // [object Math]toString.call(/s/); // [object RegExp]toString.call([]); // [object Array]//Since JavaScript 1.8.5toString.call(undefined); // [object Undefined]toString.call(null); // [object Null]

原型和原型链

原型的五条规则

  1. 所有的引用类型都可以自定义添加属性

  2. 所有的引用类型都有自己的隐式原型(proto)

  3. 函数都有自己的显式原型(prototype)

  4. 所有的引用类型的隐式原型都指向对应构造函数的显示原型

  5. 使用引用类型的某个自定义属性时,如果没有这个属性,会去该引用类型的__proto__(也就是对应构造函数的prototype)中去找

e190861e16f3dcb972e175ae56becd38.png

如何准确判断一个变量是数组类型

arr instanceof Array

instanceof判断一个引用类型是什么引用类型,是通过__proto__(隐式原型一层一层往上找,能否找到对应构造函数的prototype)

写一个原型链继承的例子

function Element(ele) {  this.ele = document.getElementById(ele);}Element.prototype.html = function(val) {  var ele = this.ele;  if (val) {    ele.innerHTML = val;    return this;  } else {    return ele.innerHTML;  }};Element.prototype.on = function(type, fn) {  var ele = this.ele;  ele.addEventListener(type, fn);  return this;}var element = new Element('main');element.html('hello').on('click', function() {  alert('handleClick');});

描述new一个对象的过程

  1. 创建一个新对象

  2. this指向这个新对象

  3. 执行代码给this赋值

  4. return this

    function Foo(name) {  this.name = name;  // return this;  // 本身会执行这一步}var f = new Foo('shiyanping');

作用域及闭包

变量提升

以下两种情况会进行提升:

  1. 变量定义

  2. 函数说明

this几种不同的使用场景

  1. 在构造函数中使用(构造函数本身)

  2. 作为对象属性时使用(调用属性的对象)

  3. 作为普通函数时使用(window)

  4. call,apply,bind(执行的第一个参数)

var a = {  name: 'A',  fun: function() {    console.log(this.name);  }};a.fun();  //this === aa.fun.call({ name: 'B' });  //this === { name: 'B' }var fun1 = a.fun;fun1(); //this === window

如何理解作用域

  1. 自由变量

  2. 作用域链,及自由变量的查找,找不到逐级向上找

  3. 闭包的两个场景

    1. 函数作为变量传递

    2. 函数作为返回值

实际开发中闭包的应用

// 判断一个数字是否出现过function isFirst() {  var _list = [];  return function(id) {    if (_list.indexOf(id) >= 0) {      return false;    } else {      _list.push(id);      return true;    }  };}var first = isFirst();first(10);first(10);first(20);

单线程和异步

同步和异步的区别,分别列举一个同步和异步的例子

同步会阻塞代码,但是异步不会 alert是同步 setTimeout是异步

关于setTimeout的笔试题

console.log(1);setTimeout(function() {  console.log(2);}, 0);console.log(3);setTimeout(function() {  console.log(4);}, 1000);console.log(5);// 输出结果:1,3,5,2,4

前端使用异步的场景

  1. 定时任务:setTimeout,setInterval

  2. 网络请求:ajax请求,动态img加载

  3. 事件绑定

需要等待的情况下都需要异步,因为不会像同步一样阻塞
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值