一 h5新特性:

1, 新增了语义化标签

header,footer,article,aside,section,nav,hgroup,time,main等

2,新增表单控件

email,tel,url,number,range,search,color,

3 表单属性

palceholder 输入框提示

autofocus 表单获取输入焦点

required 必填字段

4 本地存储

4.1localStorage

储存时间:除非手动清除,永久保存,

大小:20MB

4.2 sessionsStorage

储存事件:关闭页面则消失

大小:5MB

二 css3新特性

1圆角

border-radius

2 阴影

bos-shadow

3 盒子模型

border-box:border-box(高宽不再受内边距和边框的影响)

4 过渡,动画

transform(旋转),scale(缩放),translate(定位) transition(过渡)

5,flex伸缩盒子
6 新增属性选择器

E[data] —— 选择带有data属性的元素对象

E[data=“one”] —— 选择带有data属性的元素对象且属性值为one

E[data^=“o”] —— 选择带有data属性的元素对象且属性以o开头

E[data$=“e”] —— 选择带有data属性的元素对象且属性以e结尾

E[data*=“n”] —— 选择带有data属性的元素对象且属性包含n

三 es6语法

es6新增了块级作用域,let声明的变量只能在作用域内使用,取消了变量提升

const 用来声明常量,声明后不可更改 新增箭头函数(变量1,变量2)=>{};

3.1解构数组和对象:

let arr = [2, 3, 5];

​ let [a, b, c] = arr;

​ console.log(a); //2

​ console.log(b);//3

​ let obj = {

​ uname: ‘张三’,

​ age: 23,

​ sex: ‘男’

​ }

​ let {

​ uname: a1,

​ age: b1,

​ sex: c1

​ } = obj;

console.log(a1); //张三

​ console.log(b1);//23

​ console.log(c1);//男

3.2快速为对象赋值

let uname = ‘张三’

​ let sex = ‘男’

​ let age = 19;

​ let obj = {

​ uname,

​ age,

​ sex

​ };

​ console.log(obj);打印结果:

四 this指向问题

五 js继承的方式

1,类的继承(使用extends关键字)

  class Father {constructor(x, y) {this.x = x;this.y = y;}sum() {console.log(this.x + this.y);}}class Son extends Father {constructor(x, y) {super(x, y); //调用了父类中的构造函数}}var son = new Son(1, 2);var son1 = new Son(11, 22);son.sum();son1.sum();

2,子构造函数继承父构造函数中的属性和方法

    // 借用父构造函数继承属性// 1. 父构造函数function Father(uname, age) {// this 指向父构造函数的对象实例this.uname = uname;this.age = age;}// 2 .子构造函数 function Son(uname, age, score) {// this 指向子构造函数的对象实例Father.call(this, uname, age);this.score = score;}var son = new Son('刘德华', 18, 100);console.log(son);

使用父构造函数继承属性,使用原型对象继承方法:
通过call改变this的指向,将this指向为子构造函数本身

  function Father(uname, age) {​      //this指向父构造函数的对象实例​      this.uname = uname;​      this.age = age;​    }​    Father.prototype.money = function () { //父构造函数的原型对象上面增加的方法​      return 11111111111​    }​    //2,子构造函数​    function Son(uname, age, sore) {​      //this指向子构造函数的实例对象​      Father.call(this, uname, age) //先调用父,将指向改为子​      this.sore = sore; //子构造函数自身属性​    }Son.prototype = new Father(); //利用对象的方式改变了原型对象,需要利用constructor指回原对象Son.prototype.constructor = Son; //指回原对象Son.prototype.exat = function () {console.log('考试');}let son = new Son("刘德华", 23, 99)console.log(son.money());console.log(son);console.log(Father.prototype);

六 浅拷贝和深拷贝

浅拷贝:只拷贝第一层属性,更深层次的属性是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间。注意:当内存销毁的时候,指向对象的指针,必须重新定义,才能够使用;改变更深层次赋值对象的属性时,原对象的属性也会改变

方法一:遍历对象for (var k in obj){}

  let obj = {uname: 'zs',age: 22,msg: {sex: '男'}}let o = {}for (let k in obj) {o[k] = obj[k]}// o.msg.sex = '女'console.log(o);

改变o.msg.sex时,obj里面的值也会变

方法二:Object.assign(o, obj); assign es6新增语法糖,第一个参数为拷贝后的对象,第二个参数为要拷贝的对象,

  let obj = {uname: '张三',age: 18,msg: {sex: '男'}}let o = {}Object.assign(o, obj); //ES6新增语法糖  console.log(o);o.uname = '李四'o.msg.sex = '女'console.log(o);console.log(obj); //浅拷贝会改变原来的数据 有就覆盖,没就添加

打印结果:

因为uname属性是第一层的,因此修改uname属性后并没有改变原对象的uname值,但是sex属性在msg对象中,属于深层次的,由于浅拷贝只拷贝了地址,因此改变了msg里面的sex后,原对象中的sex属性值也发生了变化;

深拷贝:拷贝多层,开辟一个独立的空间,将所有东西都拷贝进来,

方法:

   let o1 = {}deepCopy(o1, obj)o1.msg.sex = '女'console.log(o1);console.log(o);function deepCopy(newobj, oldobj) {for (let k in oldobj) {//先判断数据类型//1,获取属性值  oldobj[k]let item = oldobj[k];//2先判断是否为数组if (item instanceof Array) {newobj[k] = [];deepCopy(newobj[k], item) //再次遍历,遍历的是数组 把值给属性// 3,判断是否为对象} else if (item instanceof Object) {newobj[k] = {};deepCopy(newobj[k], item) //再次遍历,遍历的是对象 把值给属性 } else {//简单数据类型newobj[k] = item;}}}

由于是深拷贝,所以改变深层的属性值也不会对原对象内容进行改变;

七 闭包的理解 应用场景

闭包:指有权访问另一个函数作用域中变量的函数

​ 在当前作用域内使用了其他作用域中的局部变量

 闭包的主要作用: 延伸了变量的作用范围

在js中,子函数可以使用父函数中的局部变量,因为子函数依赖父函数而存在;这样子函数就形成了闭包

八 原型链

原型链 由 构造函数,原型对象,实例对象组成,实例对象通过对象原型使用原型对象中的方法,

如果没有就通过原型对象中的__proto去Object原型对象中查找,一层层向上查找;

就是一个函数调用它本身不存在的方法,通过原型链一层层向上查找;

kk可以调用Object原型对象和Star原型对象中的方法;

详细说明:https://blog.csdn.net/weixin_44134588/article/details/108101633

九 数组去重

这里提供三种方法
    var arr = [1, 2, 3, 6, 7, 4, 2, 5, 8, 4, 3, 6, 5];var newarr = [];// 传统遍历for (var n = 0; n < arr.length; n++) {if (newarr.indexOf(arr[n]) === -1) {newarr.push(arr[n]);}}console.log(newarr);//set数据结构var newArr = new Set(arr); //set数据结构实现快速去重let newArr2 = [...newArr] //存入数组中console.log(newArr2);// filter方法let newArr1 = arr.filter(function (value, index, self) {return self.indexOf(value) === index //判断索引值是否===在数组中的索引值,如果等,则返回,后面的重复元素因为返回的索引值不等,所以不被返回})console.log(newArr1);

十 js中的三个包装对象

String、Number、Boolean 可以通过new创建

十一 在数组中查找某一个值,可以用哪些方法?

find ,filter some

js常见面试题及简单回答相关推荐

  1. vue.js 常见面试题_使用Vue.js时应避免的常见错误

    vue.js 常见面试题 Looking for a front-end framework to try out, I started with React and then tried Vue.j ...

  2. Node.js常见面试题

    Node.js常见面试题 1.NodeJS中的this为什么是一个空对象? 2.NodeJS中为什么可以直接使用exports.require.module.__filename.__dirname? ...

  3. JS 常见面试题 - 事件循环机制

    一.浏览器JS异步执行的原理 一般常说js是一门单线程语言,那为什么可以异步执行且不发生阻塞呢? 常说的JS是单线程语言,是因为执行JS的引擎是单线程的,而浏览器本身是多线程的 浏览器主要含有: js ...

  4. js常见面试题(二)

    原型和原型链 原型链:当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的__proto__隐式原型上查找,即它的构造函数的prototype,如果还没有找到就会再在构造 ...

  5. List集合中的常见面试题以及简单思路

    1.集合框架(简介.Collection方法.迭代器) Collection就是相当容器 特殊的方法有iterator;相当于抓娃娃机中的夹子,把容器的元素取出的工具 <面试题 一.集合的rem ...

  6. 使用原生JS求一段字符串出现最多的次数和最少的次数,最大值和最小值(JS常见面试题)

    直接看代码(一把梭也可以): let strings = 'aqqwwqqaaasddvvccxxxx..........' let obj = {}; for (let i = 0; i < ...

  7. 前端常见面试题 - JS篇

    以下会是JS常见面试题: 面试题将会以系列不定时更新,编写不宜,如有用到,请动动小手关注一下. 1. 简述ES6 1. let: 块级作用域. 2. const: 常量; 块级作用域; 一旦声明, 则 ...

  8. SpringMVC常见面试题总结(超详细回答)

    1.什么是Spring MVC ?简单介绍下你对springMVC的理解? Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,C ...

  9. 前端常见面试题之----js单线程,微任务宏任务

    js单线程,微任务宏任务 前言 一.什么是单线程? 二.为什么JS是单线程? 三.任务队列 1. 什么是任务队列 2. 什么是微任务宏任务 四.常见面试题例子 总结 前言 他来了他来了,前端必问题之一 ...

最新文章

  1. 《Total Commander:万能文件管理器》——第2.3节.下载与安装
  2. Java中的队列同步器AQS
  3. 修复bug的12个关键步骤:
  4. FFT C语言 修改了matlab
  5. POJ1330-Nearest Common Ancestors【tarjan,LCA】
  6. centos ping不通百度 ping不通外网
  7. python3萌新入门笔记_我的Python3萌新入门笔记
  8. MySQL有什么新功能?
  9. linux下qt生成dll,Qt 创建和使用动态链接库 - cibiren2011的专栏 - 博客频道 - CSDN.NET...
  10. TSynDBDataSet内存表
  11. Python存储和读取数据
  12. c语言对字符串逆序,【C语言】 字符串逆序
  13. 如何使用加密狗加密自己程序
  14. 稳压二极管工作原理与使用
  15. Python —— excel 创建 复制 删除,获取最大行列
  16. 通过nginx实现线上页面访问本地接口
  17. keras 自定义Layer
  18. 超强 SVN 对比 excel 工具 Spreadsheet Compare使用方法
  19. input 使用outline属性去掉淡蓝色边框不生效
  20. C++鲜为人知的符号

热门文章

  1. 如何查看vue打印的console.log日志
  2. 【ThreeJS基础教程-初识Threejs】1.ThreeJS的HelloWorld
  3. js读取本地文本文件,并生成Excel文件
  4. hdu2094 集合set
  5. 3万亿背后 阿里正在造全球通用计算机
  6. 【国产开源】兼容redis协议的内存数据库
  7. treeview demo
  8. string+DFS leetcode-17.电话号码下的字母组合
  9. JDBC,你真的知道怎么用吗?
  10. jbpm工作流动态会签