常见值类型:
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. ConvertHelper

    DataTable 转Json using Newtonsoft.Json; public static string DataTableToJson(DataTable dt) { varJsonS ...

  2. Spring框架第一天(搭建项目)

    Spring框架 1.简介 1.1 Spring是什么 一个开源的框架,是JavaEE开源框架 Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以IoC(Inve ...

  3. .NetCore Web Api 利用ActionFilterAttribute统一接口返回值格式

    .Net Core 同 Asp.Net MVC一样有几种过滤器,这里不再赘述每个过滤器的执行顺序与作用. 在实际项目开发过程中,统一API返回值格式对前端或第三方调用将是非常必要的,在.NetCore ...

  4. application.properties文件常用配置

    项目一直在用properties文件写配置,因为配置不是自己来写所以也从来没有研究过各个配置的含义,所以对很多配置也是一知半解,只是知道可以这样用,但是不知道为什么能这样用.自己抽空找了一下资料做个记 ...

  5. ESXI 虚拟化误删除管理端口Management Network (vmk0),导致无法访问后台解决方案

    按F2开启控制台shell,启用后返回.按Alt+F1打开终端. 输入 esxcfg-vmknic -a -i 192.168.1.10 -n 255.255.255.0 "Manageme ...

  6. 采用 DIV+CSS 布局网页练习

    实验四:采用 DIV+CSS 布局网页练习 实验目的: 熟悉 DIV+CSS 布局网页的方法 实验要求: 1.制作一个完整网页和一个 css 文件: 2.在网页中采用 DIV+CSS 布局 4 个以上 ...

  7. ASP.NET Core 6框架揭秘实例演示[24]:中间件的多种定义方式

    ASP.NET Core的请求处理管道由一个服务器和一组中间件组成,位于 "龙头" 的服务器负责请求的监听.接收.分发和最终的响应,针对请求的处理由后续的中间件来完成.中间件最终体 ...

  8. [ Shell ] 两个 case 实现 GetOptions 效果

    https://www.cnblogs.com/yeungchie/ 可以用 getopt,但我还是喜欢自己写这个过程,便于我够控制更多细节. 下面要实现的效果是,从命令行参数中分析,给 $libNa ...

  9. python3输出由1、2、3、4这四个数字组成的每位数都不相同的所有三位数

    for i in range(1,5): for j in range(1,5): for k in range(1,5): if(i!=j and i!=k and j!=k): print(i*1 ...

  10. 使用python自动发放员工工资条到个人邮箱

    人力资源部每个月发工资条,以前靠人工手动一条一条的复制,200多号员工,差不多需要耗费一天时间. 用python写个脚本,分分钟的事情就可以全部发送完. 我这边工资表如下图 姓名在C列,邮箱在B列. ...