常见值类型:
let a; //undefined

let s = 'abc';
let n = 100;
let b = true;
let sb = Symbol('s');
let nn = NaN
 
常见引用类型:
const obj = {x: 100};
const arr = [1, 2, 3];
const n = null;//特殊引用类型,指针指向为空
// 特殊引用类型,但不用于存储数据,所以没有“拷贝,复制函数”这一说
function fn(){}
console.log(typeof obj) //obj
console.log(typeof arr) //obj
console.log(typeof n)   //obj
console.log(typeof fn)  //function
 
typeof运算符:
1、识别所有的值类型
2、识别函数
3、判断是否是引用类型 (不可再细分)

let a; //undefined
let s = 'abc';
let n = 100;
let b = true;
let sb = Symbol('s');
console.log(typeof a);// 'undefined'
console.log(typeof s);// 'string'
console.log(typeof n);// 'number'
console.log(typeof b);// 'boolean'
console.log(typeof sb);// 'symbol' /*判断函数*/
function fn(){}
console.log(typeof fn); // 'function' /*判断是否是引用类型 (不可再细分)*/
console.log(typeof null); // 'object'
console.log(typeof []); // 'object'
console.log(typeof {}); // 'object'
深拷贝:

const obj = {
a: 100,
b: {
b1: [1, 2, 3],
b2: 'string'
},
c: ['a', 'b', 'c']
} /*
* 没做深拷贝的效果
const obj2 = obj
obj2.a = 200
obj2.b.b2 = 'abc123'
obj2.c[0] = 'aa'
console.log(obj)
console.log(obj2) obj2修改的内容会影响obj的内容,因为他们修改的都是同一个堆内容
* */ const obj2 = deepClone(obj);
obj2.a = 200
obj2.b.b2 = 'abc123'
obj2.c[0] = 'aa'
console.log(obj)
console.log(obj2) /**
* 深拷贝
* @param {Object} obj 要深拷贝的对象
* */
function deepClone(obj = {}) {
// obj如果不是引用类型,或者是null,直接返回
if (typeof obj !== 'object' || obj == null) {
return obj
}
// 初始化返回结果
let result;
if (obj instanceof Array) {
result = []
} else {
result = {}
}
// 遍历obj
for (let key in obj) {
// 保证key不是原型的属性
if (obj.hasOwnProperty(key)) {
// 递归调用
result[key] = deepClone(obj[key])
}
}
return result
}
类型转换常考考点:
1、字符串拼接
let a = 100 + 10;//110
let b = 100 + '10';// '10010'
let c = true + '10';// 'true10'
 
2、==运算符
100 == '100' // true
0 == '' // true
0 == false // true
false == '' // true
null == undefined // true
 
// ==运算符的使用场景
// 除了==null之外,其他一律都用 === ,例如:
const obj = {x:100}
if(obj.a == null){}
// 相当于: if(obj.a === null || obj.a === undefined){}
 
3、if语句和逻辑运算
truly变量:!!a === true 的变量
falsely变量:!!a === false 的变量
以下是falsely变量,除此之外都是truly变量
    /*
    * !!0 === false
    * !!NaN === false
    * !!'' === false
    * !!null === false
    * !!undefined === false
    * !!false === false
    * */
在if语句中的判断就是判断是truly变量还是falsely变量。truly变量就是为真,falsely变量就是为false
 
逻辑判断 与或非 && || !
 
4、new运算符的实现机制
首先创建了一个新的 空对象
设置原型,将对象原型设置为函数的 prototype 对象
让函数的 this 指向这个对象,执行构造函数的代码(为这个新对象添加属性)
判断函数的返回值类型,如果是值类型,返回创建的对象。如果是引用类型,就返回这个引用类型的对象。
 

前端面试题整理——Javascript基础的更多相关文章

  1. 前端面试题整理---JS基础

    为了督促自己学习,整理了一下前端的面试题 JavaScript: JavaScript 中如何监测一个变量是String类型? typeof(obj)==="string"; ty ...

  2. 前端面试题整理—JavaScript篇(一)

    1.JS的基本数据类型和引用数据类型有哪些,两者区别 基本数据类型->string.number.Boolean.null.undefined.symbol 引用数据类型->array.o ...

  3. 前端面试题整理——javaScript部分

    (1)typeof 和 instanceof 1.typeof 对于基本数据类型(boolean.null.undefined.number.string.symbol)来说,除了 null 都可以显 ...

  4. 前端面试题整理—JavaScript篇(二)

    1.使用js实现一个可持续的动画 2.实现一个可以自由拖动的悬浮框 3.实现一个倒计时效果 4.使用js仿写一个原生下拉列表框 5.创建10个<a>标签,点击的时候弹出对应的序号 6.实现 ...

  5. 前端面试题 之 JavaScript

    昨天我们一起分享了关于html和css的面试题<前端面试题之Html和CSS>,今天我们来分享关于javascript有关的面试题.我面试的时候最害怕面试官问我js了,因为我真心不擅长这个 ...

  6. 【web前端面试题整理02】前端面试题第二弹袭来,接招!

    前言 今天本来准备先了解下node.js的,但是,看看我们一个小时前与一个小时后的差距: 既然如此,我们继续来搜集我们的前端面试题大业吧!!! 特别感谢玉面小肥鱼提供哟,@玉面小飞鱼 题目一览 Jav ...

  7. 前端面试题(JavaScript)

    (前端面试题大全,持续更新) 箭头函数特点?箭头函数和普通函数的区别 手写懒加载(考虑防抖和重复加载问题) 手写bind(为什么要加预参数,为什么要加new) apply, call, bind ne ...

  8. 【web前端面试题整理06】成都第一弹,邂逅聚美优品

    前言 上周四回了成都,休息了一下下,工作问题还是需要解决的,于是今天去面试了一下,现在面试回来了,我感觉还是可以整理一下心得. 这个面试题整理系列是为了以后前端方面的兄弟面试时候可以得到一点点帮助,因 ...

  9. 2019届校招前端面试题整理——HTML、CSS篇

    前言 2019届校招陆陆续续开始了,整理了一些高频的面试题. HTML部分 1. 什么是<!DOCTYPE>? DOCTYPE是html5标准网页声明,且必须声明在HTML文档的第一行.来 ...

随机推荐

  1. git合并分支代码的方法

    1.先提交本地代码,防止被拉取其他分支的代码污染(self为自己的分支 other为想要拉取的分支) git add . git commit -m '备注信息' git push origin se ...

  2. CSAPP-Lab03 Attack Lab 记录

    纸上得来终觉浅,绝知此事要躬行 实验概览 Attack!成为一名黑客不正是我小时候的梦想吗?这个实验一定会很有趣. CMU 对本实验的官方说明文档:http://csapp.cs.cmu.edu/3e ...

  3. Ghost:凛冬散尽,长夜终明

    你须领先于一切离别,仿佛它们全在你身后 像刚刚逝去的冬天 因为许多冬天中有一个无尽的冬天 使你过冬之心终究捱[ái]过                                          ...

  4. web -- ssrf

    web学习之SSRF 最开始玩ctf接触的就是web但是随着开始逐渐专注于pwn,在加之web的知识体系本来就繁杂,所以准备写一期关于web大体的知识 day1 SSRF SSRF(Server-Si ...

  5. 路径查找算法应用之A*算法

    环境:Visual Studio 2017 + .Net Framework 4.5 应用场景:在画板上查找起始点和目标点之间的最短最直路径,最后画出连接两个点之间的折线. 算法简介:A*算法是一种性 ...

  6. (七)React Ant Design Pro + .Net5 WebApi:后端环境搭建-日志、异常处理

    一.日志 日志具有帮助开发者快速的定位问题,记录各种信息,配合其他分析框架使用等等功能,收集日志的各类框架如:Log4net.NLog.Exceptionless.Serilog等等,百度或园子里介绍 ...

  7. ArcMap操作随记(5)

    1.[栅格转面]等工具的使用 若栅格数据为浮点型,需使用[转为整型]工具,将栅格转为整型,再进行操作. 2.人口密度分布趋势图 使用[核密度分析]工具,也可尝试插值 3.点要素做面 [点集转线][要素 ...

  8. JDBC 使用详解

    1.JDBC 编程步骤: 加载驱动程序; Class.forName(driverClass) 加载Mysql驱动:Class.forName("com.mysql.jdbc.Driver& ...

  9. ElasticSearch7.3 学习之定制分词器(Analyzer)

    1.默认的分词器 关于分词器,前面的博客已经有介绍了,链接:ElasticSearch7.3 学习之倒排索引揭秘及初识分词器(Analyzer).这里就只介绍默认的分词器standard analyz ...

  10. linux下yum无法安装lrzsz,Error: Failed to download metadata for repo ‘appstream‘: Cannot prepare internal

    镜像下载.域名解析.时间同步请点击阿里云开源镜像站 linux虚拟机上准备安装一下rz sz,执行yum命令后提示如下: [root@tony001 ~]# yum install lrzsz Cen ...