01,如何开启JS严格模式?JS严格模式有什么特点?

两种方式

全局开启在js开头加上

'use strict'

局部开启,在作用域开头加上

function fn(){
'use strict'
}

特点:

1,全局变量必须先声明

2,禁止使用with

3,创建eval作用域

有单独的作用域

4,禁止this指向window

5,函数参数不能重名

02、offsetHeight、scrollHeight、clientHeight有什么区别?

offsetHeight = boder + padding + content

clientWidth =  padding + content

scrollWidth = padding + 实际内容大小

注意:不要频繁的去获取offsetHeight等值,所有DOM操作都很费性能

scrollLeft 左边滚动距离 scrollTop 距离顶部的距离

offsetParent 找距离自己定位过的父级

获取元素距离页面顶部的距离?

offsetParent.scrollTop + xx.scrollTop  定位过得父级top 加上 自身距离父级的top

obj.getBoundingClientRect().top

03、HTMLCollection与NodeList区别?

HTMLCollection 是 Element 集合

obj.children,只包含⼦元素

NodeList 是 Node 集合

obj.childNodes,包含⽂本、注释、空格、换⾏

DOM是⼀棵树,所有节点都是Node

04、箭头函数有什么缺点?什么时候不能使⽤箭头函数?

** 箭头函数的this指向⽗作⽤域 **

箭头函数有什么缺点?

一,没有 arguments

二,⽆法通过 call、apply、bind 改变 this

1、相同点
三个都是用于改变this指向;
接收的第一个参数都是this要指向的对象;
都可以利用后续参数传参。
2、不同点
call和bind传参相同,多个参数依次传入的;
apply只有两个参数,第二个参数为数组;
call和apply都是对函数进行直接调用,而bind方法不会立即调用函数,而是返回一个修改this后的函数。

不能使⽤箭头函数的场景:

1.对象的⽅法,不能使⽤ -> this 指向不正确

2.原型⽅法 __proto__,不能使⽤ -> this 指向不正确

3.构造函数,不能使⽤ -> this 指向不正确

4.动态上下⽂中使⽤this,不能使⽤ -> this 指向不正确

5.Vue的⽣命周期和method,不能使⽤ -> this 指向不正确

05、for..in 与 for..of 有什么区别?

for..in 遍历得到key,可以遍历对象,不可以遍历 Set 和 Map

for..of 遍历得到value,不可以遍历对象,可以遍历 Set 和 Map

Set 和 Map

Set

  • 集合是由一组无序且唯一的项组成的,可以想象成集合是一个既没有重复元素,也没有顺序概念的数组
  • ES6提供了新的数据结构Set,类似于数组,但是成员的值都是唯一的,没有重复的值
  • Set本身是一个构造函数,用来生成Set数据结构的

Map

  • 类似于对象,也是键值对的集合,但是键的范围不限于字符串,各种类型的值都可以当作键,是一种更完善的Hash结构实现,如果你需要键值对的数据结构,Map 比 Object更合适
  • 集合和字典的区别:
    — 共同点:集合,字典可以存储不重复的值
    — 不同点:集合是以[值,值]的形式存储元素,字典是以[键,值]的形式存储

06、typeOf 可以判断哪些类型?

基本数据类型,判断 {} 或 【】会返回 object

undefined

string

number

boolean

function

object

symbol 是ES6 引入了一种新的基本数据类型(原始数据类型) Symbol ,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,前六种是: undefined 、 null 、布尔值(Boolean)、字符串 (String)、数值(Number)、对象(Object)。

每个从 Symbol() 返回的symbol值都是唯一的。一个symbol值能作为对象属性的标识符

07、阅读代码,填写结果

console.log('我的年龄是' + 18 + 1)    我的年龄是181

console.log(100 == '100')  true

console.log(0 == '') true

console.log(0 == false) true

console.log(false == '') true

console.log(null == undefined) true

08、何时使⽤ == ?何时使⽤ === ?

除了 if (obj.a == null) 使⽤ == 之外,全部⽤ ===

扩展

falsely 变量,除此之外都是 truly 变量

!!0 === false

!!NaN === false

!!'' === false

!!null === false

!!undefined === false

!!false === false

!! 取反之后还是 false 的就是 falsely 变量

09、阅读代码,填写结果

let a1=10;
let b1=a1;
b1=100;
console.log(a1); // 此时 a1 的值是多少?
let a2={age: 18};
let b2=a2;
b2.age=20;
console.log(a2); // 此时 a2.age 的值是多少?

【值类型】

赋值后,⼊栈,不会互相⼲扰

常⻅值类型:undefined、string、bumber、boolean、symbol

【引⽤类型】

会互相⼲扰

常⻅引⽤类型:对象{a:10}、数组[1, 2, 3]、null

一个是传值,一个是传址

10. ⼿写深拷⻉函数

const obj={
name: '张三',
学⽣反馈
age: 18,
address: {
city: 'beijing'
},
hobby: ['篮球', '台球']
}
function deepClone(obj = {}) {
if (typeof obj !== "object" || obj == null) {
return obj;
}
let result;
if (obj instanceof Array) {
result = [];
} else {
result = {};
}
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
result[key] = deepClone(obj[key]); // 递归
}
}
return result;
}

个人博客原文地址:http://blog.qianbaiyv.cn/get/my/blog/details/2311887075%40qq.com/118

面试 个人摸底监测 考察JavaScript基础 (第三天)的更多相关文章

  1. JavaScript基础(三)

    十三.JS中的面向对象 创建对象的几种常用方式 1.使用Object或对象字面量创建对象 2.工厂模式创建对象 3.构造函数模式创建对象 4.原型模式创建对象 1.使用Object或对象字面量创建对象 ...

  2. javascript基础(三)运算

    原文http://pij.robinqu.me/ 递增递减操作符(包括前置和后置).一元正负符号操作符 这些操作符适用于任何数据类型的值,针对不同类型的值,该操作符遵循以下规则(经过对比发现,其规则与 ...

  3. JavaScript基础学习(三)—数组

    一.数组简介     JavaScript数组的每一项都可以保存任何类型的数据,也就是说数组的第一个位置保存字符串,第二个位置可以保存数值,第三个位置可以保存对象,而且数组的大小是可以动态调整的,即可 ...

  4. 回归JavaScript基础(三)

    主题:JavaScript基本概念. 任何语言的核心必然会描述这门语言最基本的工作原理.这部分内容对我们来说,读起来很乏味,甚至会产生困意,但这部分内容却是重要的!我有幸拜读<JavaScrip ...

  5. 前端开发之JavaScript基础篇三

    主要内容: 1.创建对象的几种方式 2.JavaScript内置对象 3.JavaScript错误--Throw.Try 和 Catch 4.JavaScript 表单验证 一.创建对象的几种方式 1 ...

  6. javascript基础(三): 操作DOM对象(重点)

    DOM:文档对象模型 核心 浏览器网页就是一个Dom树形结构! 更新:更新Dom节点 遍历Dom节点:得到Dom节点 删除:删除一个Dom节点 添加:添加一个新的节点 要操作一个Dom节点,就必须要先 ...

  7. JavaScript 基础第三天

    一.前言 在前天的内容我们提到了有关于JS的一些语言结构,这些语言结构都是语法中最为基本的内容必须予以熟记并可以灵活掌握. 二.引入 在今天内容中我们将讨论两个很重要的概念,数组与函数. 三.重点内容 ...

  8. javascript基础拾遗(三)

    1.map数组映射操作 function add(x) { return x+1 } var nums = [1,3,5,7,9] result = nums.map(add) console.log ...

  9. JavaScript基础四

    1.13 Js中的面向对象 1.13.1 创建对象的几种常用方式 1.使用Object或对象字面量创建对象 2.工厂模式创建对象 3.构造函数模式创建对象 4.原型模式创建对象 1.使用Object或 ...

  10. JavaScript基础:DOM操作详解

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 前言 JavaScript的组成 JavaScript基础分为三个部分: ...

随机推荐

  1. 第七十五篇:Vue兄弟组件传值

    好家伙, 兄弟组件的传值用到Eventbus组件, 1.EventBus的使用步骤 ① 创建 eventBus.js 模块,并向外共享一个Vue的实例对象 ②在数据发送方, 调用bus.$emit(' ...

  2. API设计中性能提升的10种解决方法

    api的设计涉及到的方面很多, 分类是一个基本的思考方式.如果可以形成一个系列性的文字,那就从性能开始吧. 就像任何性能一样,API 性能主要取决于如何响应不同类型的请求.例如:典型的电商场景,显示用 ...

  3. yum install lrzsz

    yum install lrzsz rz:从本地上传文件至服务器 sz filename:从服务器下载文件至本地

  4. 2022-9-5 JavaSE note

    Java SE 1.IDEA基本操作 psvm + 回车 : main() 方法声明 sout + 回车 : = System.out.println(); Ctrl + D : 把当前行复制到下一行 ...

  5. 通过 Traefik 使用 Kubernetes Service APIs 进行流量路由 (http,https,金丝雀发布)

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247490229&idx=1&sn=ca817054 ...

  6. [算法2-数组与字符串的查找与匹配] (.NET源码学习)

    [算法2-数组与字符串的查找与匹配] (.NET源码学习) 关键词:1. 数组查找(算法)   2. 字符串查找(算法)   3. C#中的String(源码)   4. 特性Attribute 与内 ...

  7. vue3 自定义指令控制按钮权限

    经过1个周的摸索和查阅资料,终于搞定VUE3中自定义指令,实现按钮级别的权限控制.当然,只是简单的对按钮进行隐藏和删除的dom操作比较容易,一直纠结的是当按钮无权限时,不是直接删除当前dom元素(bu ...

  8. Qt+ECharts开发笔记(五):ECharts的动态排序柱状图介绍、基础使用和Qt封装Demo

    前言   上一篇的demo使用隐藏js代码的方式,实现了一个饼图的基本交互方式,并预留了Qt模块对外的基础接口.  本篇的demo实现了自动排序的柱状图,实现了一个自动排序柱状图的基本交互方式,即Qt ...

  9. 关于vmware虚拟机的ova/ovf转换成aws上的AMI镜像

    很多时候,我们会有这样的需求,需要将DC中vmware虚拟化的服务器,迁移到aws上,我们就得先将vmware虚拟机导出,然后转换 关于vmvare虚拟的导出备份,一般有ova(Open Virtua ...

  10. virtualbox的Linux虚拟磁盘大小调整及注意事项

    virtualBox 调整磁盘分区 起因 起初安装centos6.3 时,没有修改默认的硬盘空间.只有8G,导致后面安装完zookeeper,jdk之后,在安装mysql发现磁盘空间不足 扩容步骤 1 ...