JS高频面试题

1. javascript的typeof返回哪些数据类型.

答案:string,boolean,number,undefined,function,object,symbol(第一无二的值)
基本数据类型: 字符串,数字,布尔值,undefined,null
引用数据类型: 对象,数组,函数,data等
注意: typeOf(NaN),结果是number,
使用isNaN(NaN) 结果是true,表示非有效数字;

2. 例举3种强制类型转换(显示转换)和2种隐式类型转换?

强制转换主要是Number,Boolean,String这三个函数
强制字符串转换为数字(parseInt整数,parseFloat浮点数,number整数或者浮点数)
强制转为字符串,toString()和String()。 只有String()可以把参数里的所有传值都转换为String类型,而toString()在转换null和undefined时会报错
强制转换:Boolean()函数,undefined, null, 0, NaN ‘’, 都是false,其他都是true;
隐式类型转换:
隐式(== ===)

3. split() join() 的区别

答案:split() 是将字符串切割成数组的形式,join()后者是将数组转换成字符串

join()后者是将数组转换成字符串

重点看:
数组,先转为字符串,一般通过添加.split(“”)把每一项都添加“”, reverse反转后,
在通过添加.join(“”),把每一项的“”去掉;

分析:必须是字符串.split(“”), 才可以每一项都添加“”;
只有每一项都添加了“”, 才可以时候用reverse反转;
反转后,想去掉“”, 用join(“”), 就可以啦;

4. 闭包是什么,有什么特性,对页面有什么影响

答案:闭包就是能够读取其他函数内部变量的函数。 使得函数不被GC回收,如果过多使用闭包,容易导致内存泄露
个人理解: 闭包,函数a中创建一个函数b, 函数b可以访问函数a中的变量,这就是闭包。

闭包的好处: (1)希望一个变量长期驻扎在内存当中(不被垃圾回收机制回收; (2)避免全局变量的污染

(3)私有成员的存在(4)安全性提高

5. ””和“=”的不同

答案:前者会自动转换类型,再判断是否相等
后者不会自动类型转换,直接去比较

6. 看下面代码,给出输出结果。

答案:4 4 4。
原因:Javascript事件处理器在线程空闲之前不会运行。

回答以下代码,alert的值分别是多少?

正确答案是: 100, 10, 10

以下代码执行结果

分别alert出 undefined,lily,(变量声明提前问题)

7. Cookie/Session

Cookie通过在客户端记录信息确定用户身份,
Session通过在服务器端记录信息确定用户身份。
cookie和session的区别

具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,
由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的

cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session

session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie

单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie。

8. 普通函数与箭头函数的区别

1.箭头函数没有原型 原型是undefined
2.箭头函数this指向全局对象 而函数指向引用对象
3.call,apply,bind方法改变不了箭头函数的指向

9. es6相关特性

阮一峰: https://es6.ruanyifeng.com/

10. 原型与原型链

原型

①所有引用类型都有一个__proto__(隐式原型)属性,属性值是一个普通的对象
②所有函数都有一个prototype(原型)属性,属性值是一个普通的对象
③所有引用类型的__proto__属性指向它构造函数的prototype
var a = [1,2,3];
a.__proto__ === Array.prototype; // true

原型链

当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,
则会去它的__proto__隐式原型上查找,即它的构造函数的prototype,
如果还没有找到就会再在构造函数的prototype的__proto__中查找,
这样一层一层向上查找就会形成一个链式结构,我们称为原型链。

function Parent(month){
    this.month = month;
}

var child = new Parent('Ann');

console.log(child.month); // Ann

console.log(child.father); // undefined

①一直往上层查找,直到到null还没有找到,则返回undefined
②Object.prototype.proto === null
③所有从原型或更高级原型中的得到、执行的方法,其中的this在执行时,指向当前这个触发事件执行的对象。

通俗易懂:一个对象有原型对象,它的原型对象也有自己的原型对象,一直往上找,找到Object对象,
Object对象的的原型对象是null,在往上就没了。这个像链式一样的结构称为原型链。
其本质描述的是对象的一种继承关系。
就是说一个对象是怎么来的,是继承自它的原型对象。
所以说绝大多数对象,其实都是继承自Object这个构造函数的原型对象,为什么是大多数,因为我们可以通过修改构造函数的原型来破坏这种继承关系,可以,但没必要

<script>
  class Animal {
    hand = true;
    eat = function(){
      console.log("吃点东西");
    }
  }
  class People extends Animal{
    say = function(){
      console.log("说点什么吧");
      
    }
  }
  let cat = new Animal()
  console.log(cat._proto_ === Animal.prototype);  // true
  console.log(cat._proto_._proto_ === Object.prototype);  // true
  console.log(cat._proto_._proto_._proto_); // null
  // 继承关系:cat --> Animal.prototype --> Object.prototype --> null
</script>

分析:

  1. 所有的引用类型都有一个’_ _ proto_ _'属性(也叫隐式原型,它是一个普通的对象)。
  2. 所有的函数都有一个’prototype’属性(这也叫显式原型,它也是一个普通的对象)。
  3. 所有引用类型,它的’_ _ proto_ _'属性指向它的构造函数的’prototype’属性。

11.JSON.parse()与JSON.stringify()

JSON.parse()转换为JS对象
SON.stringify() 转换为json对象

未完待续!!!!!

  1. 看下列代码,输出什么?解释原因。

var a = null;
alert(typeof a);
答案:object
解释:null是一个只有一个值的数据类型,这个值就是null。表示一个空指针对象,所以用typeof检测会返回”object”。

  1. null和undefined的区别?

null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。

当声明的变量还未被初始化时,变量的默认值为undefined。 null用来表示尚未存在的对象

undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:

(1)变量被声明了,但没有赋值时,就等于undefined。

(2)调用函数时,应该提供的参数没有提供,该参数等于undefined。

(3)对象没有赋值的属性,该属性的值为undefined。

(4)函数没有返回值时,默认返回undefined。

null表示"没有对象",即该处不应该有值。典型用法是:

(1) 作为函数的参数,表示该函数的参数不是对象。

(2) 作为对象原型链的终点。

  1. Cookie在客户机上是如何存储的

Cookies就是服务器暂存放在你的电脑里的文本文件,好让服务器用来辨认你的计算机。当你在浏览网站的时候,
Web服务器会先送一小小资料放在你的计算机上,
Cookies 会帮你在网站上所打的文字或是一些选择都记录下来。当下次你再访问同一个网站,
Web服务器会先看看有没有它上次留下的Cookies资料,有的话,就会依据Cookie里的内容来判断使用者,
送出特定的网页内容给你。

  1. 如何获取javascript三个数中的最大值和最小值?

Math.max(a,b,c);//最大值

Math.min(a,b,c)//最小值

  1. javascript是面向对象的,怎么体现javascript的继承关系?
    使用prototype原型来实现。

  2. 列举javaScript的3种主要数据类型,2种复合数据类型和2种特殊数据类型。

主要数据类型:string, boolean, number

复合数据类型:function, object

特殊类型:undefined,null

  1. 程序中捕获异常的方法?

try{

}catch(e){

}finally{

}
31. Ajax原理

(1)创建对象

var xhr = new XMLHttpRequest();

(2)打开请求

xhr.open(‘GET’, ‘example.txt’, true);

(3)发送请求

xhr.send(); 发送请求到服务器

(4)接收响应

xhr.onreadystatechange =function(){}

(1)当readystate值从一个值变为另一个值时,都会触发readystatechange事件。

(2)当readystate==4时,表示已经接收到全部响应数据。

(3)当status ==200时,表示服务器成功返回页面和数据。

(4)如果(2)和(3)内容同时满足,则可以通过xhr.responseText,获得服务器返回的内容。

  1. 解释什么是Json:

(1)JSON 是一种轻量级的数据交换格式。

(2)JSON 独立于语言和平台,JSON 解析器和 JSON 库支持许多不同的编程语言。

(3)JSON的语法表示三种类型值,简单值(字符串,数值,布尔值,null),数组,对象

  1. js中的3种弹出式消息提醒(警告窗口,确认窗口,信息输入窗口)的命令式什么?
    alert
    confirm
    prompt

  2. 浏览器的滚动距离:

可视区域距离页面顶部的距离

scrollTop=document.documentElement.scrollTop||document.body.scrollTop

  1. 可视区的大小:

(1)innerXXX(不兼容ie)

window.innerHeight 可视区高度,包含滚动条宽度

window.innerWidth 可视区宽度,包含滚动条宽度

(2)document.documentElement.clientXXX(兼容ie)

document.documentElement.clientWidth可视区宽度,不包含滚动条宽度

document.documentElement.clientHeight可视区高度,不包含滚动条宽度

  1. 节点的种类有几种,分别是什么?

(1)元素节点:nodeType ===1;

(2)文本节点:nodeType ===3;

(3)属性节点:nodeType ===2;

  1. innerHTML和outerHTML的区别

innerHTML(元素内包含的内容)

outerHTML(自己以及元素内的内容)

  1. offsetWidth offsetHeight和clientWidth clientHeight的区别

(1)offsetWidth (content宽度+padding宽度+border宽度)

(2)offsetHeight(content高度+padding高度+border高度)

(3)clientWidth(content宽度+padding宽度)

(4)clientHeight(content高度+padding高度)

  1. If

  2. IF
    -当判断对象为无初始值或者其值为 0、-0、null、“”、false、undefined 或者 NaN时,if判断出来是false,加上!就是取反,即为true

  3. 目录
    ./是当前目录 …/是父级目录 /是根目录

  4. Git

一、拉取最新代码: git pull

二、提交到暂存区:
1. 提交工作区所有文件到暂存区:git add .

三、提交文件到版本库
将暂存区中的文件提交到本地仓库中,即打上新版本:git commit -m “commit”;
Git commit -m”xxx”

将所有已经使用git管理过的文件暂存后一并提交,跳过add到暂存区的过程:git commit -a -m "commit";
提交文件时,发现漏掉几个文件,或者注释写错了,可以撤销上一次提交:git commit --amend;

四、推送
git Push

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值