学习笔记,知识点来源于掘金小册-yck-前端面试之道

1.原始类型(6种)

原始类型储存的都是值

number

boolean

string

null

undefined

symbol

null不是对象类型。虽然 typeof null 会输出 object,但是这只是 JS 存在的一个悠久 Bug。在 JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象,然而 null 表示为全零,所以将它错误的判断为 object 。虽然现在的内部类型判断代码已经改变了,但是这个 Bug 却一直流传下来。

2.对象类型

对象类型储存的是地址;当创建一个对象类型的时候,计算机会在内存中帮我们开辟一个空间来存放值,对象类型储存的就是这个空间的地址

const a = [];
/*
对于常量 a 来说,假设内存地址为 #001,那么在地址 #001 的位置存放了值 [],常量 a 存放了地址 #001
*/
const b = a;
//b存放的也是地址#001,a,b指向同一片内存,互相影响

函数参数是对象会发生什么问题?

function test(person) { // person参数是p1的副本,和p1指向同一内存
person.age = 26 //这里修改person,p1也变了
person = { // 这里给person一个新地址,person与p1没关系了
name: 'yyy',
age: 30
} return person
}
const p1 = {
name: 'yck',
age: 25
}
const p2 = test(p1)
console.log(p1) // {name:'yck',age:26}
console.log(p2) // {name:'yyy',age:30}

3.typeof vs instanceof

3.1typeof能否正确判断数据类型?

typeof 1 // 'number'
typeof '1' // 'string'
typeof undefined // 'undefined'
typeof true // 'boolean'
typeof Symbol() // 'symbol'
typeof null // object
typeof [] // 'object'
typeof {} // 'object'
typeof console.log // 'function'

对于原始类型来说,除了typeof null,其他都能正确判断

对于对象类型来说,除了函数,其他都会显示object

所以typeof不能正确判断数据类型

3.2 instanceof 能正确判断对象的原理是什么?

原型链

const Person = function() {}
const p1 = new Person()
p1 instanceof Person // true var str = 'hello world' // 原始类型
str instanceof String // false var str1 = new String('hello world') // 经过了原型链,对象类型
str1 instanceof String // true

4.类型转换

js中类型转换只有三种情况:

转成布尔值

转成数字

转成字符串

5.this指向

function foo() {
console.log(this.a)
}
let a = 1
foo() // 1.指向window const obj = {
a: 2,
foo: foo
}
obj.foo() // 2.指向调用者 const c = new foo() // 3. this指向c,不会被任何其他方式改变

箭头函数的this指向函数定义时的环境(或者说箭头函数没有this,取决于包裹箭头函数的第一个普通函数的this)

 call,apply是立即调用;bind是绑定,并不会立刻执行,只会返回一个新函数,用于稍后调用

JS基础知识(未完)的更多相关文章

  1. [JS复习] JS 基础知识

    项目结尾,空闲时间,又把<JS 基础知识> 这本书过了一遍,温故知新后,很多知其然不知其所以然的内容 豁然开朗. [1. 用于范围的标签] display  :inline or bloc ...

  2. HTML+CSS+JS基础知识

    HTML+CSS+JS基础知识 目录 对HTML+CSS+JS的理解 基础知识 对HTML+CSS+JS的理解 基础知识 插入样式表的三种方式 外部样式表:<link rel="sty ...

  3. Node.js基础知识

    Node.js入门   Node.js     Node.js是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始.比较独特的是,Node.js会假设在POSIX环境下运行 ...

  4. 网站开发进阶(十五)JS基础知识充电站

    JS基础知识充电站 1.javascript alert弹出对话框时确定和取消两个按钮返回值? 用的不是alert对话框,是confirm confirm(str); 参数str:你要说的话或问题: ...

  5. NodeJs>------->>第三章:Node.js基础知识

    第三章:Node.js基础知识 一:Node.js中的控制台 1:console.log.console.info  方法 console.log(" node app1.js 1> ...

  6. JS基础知识笔记

    2020-04-15 JS基础知识笔记 // new Boolean()传入的值与if判断一样 var test=new Boolean(); console.log(test); // false ...

  7. js基础知识温习:Javascript中如何模拟私有方法

    本文涉及的主题虽然很基础,在很多人眼里属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题.这里会涉及到对象属性的封装.原型.构造函数.闭包以及立即执行表达式等知识. 公有方法 公有方法 ...

  8. js基础知识--BOM

    之前说过,在js的 运行环境为浏览器时,js就主要有三部分组成: ECMAScript核心语法.BOM.DOM.今天就和大家详细说一下BOM的一些基础知识. BOM BOM通常被称为浏览器对象模型,主 ...

  9. JS基础知识总结

      js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划() ...

随机推荐

  1. PostGIS计算矢量切片(二)--按值渲染

    方案背景     今年三月份写了一篇postgis计算矢量切片,参考了网上资料给出了一份很粗糙的相关方案(文章写的更粗糙).当时的方案中只能针对gis形状进行渲染,而不能用属性渲染.针对这个情况,本文 ...

  2. Python绘图与可视化

    Python有很多可视化工具,本篇只介绍Matplotlib. Matplotlib是一种2D的绘图库,它可以支持硬拷贝和跨系统的交互,它可以在Python脚本.IPython的交互环境下.Web应用 ...

  3. 微信小程序中通过腾讯地图进行逆地址解析报错message: "请求来源未被授权, 此次请求来源域名:servicewechat.com"

    在小程序中获取定位具体信息时,不要配置腾讯地图中的WebServiceAPI中的域名白名单什么的,域名配置直接在小程序后台中配置(就是这个货https://apis.map.qq.com), 千万千万 ...

  4. Android视频录制从不入门到入门系列教程(三)————视频方向

    运行Android视频录制从不入门到入门系列教程(二)————显示视频图像中的Demo后,我们应该能发现视频的方向是错误的. 由于Android中,Camera给我们的视频图片的原始方向是下图这个样子 ...

  5. Android Studio打包SDK后,为什么没有bundles文件夹?

    在Android Studio中,将项目打包成jar包,按照网上说的方法打包完成后,在intermediates文件夹下没有bundles,AS版本3.1.2,后来发现,原来是intermediate ...

  6. 简单易懂的单元测试框架-gtest(二)

    简介     事件机制用于在案例运行前后添加一些操作(相当于挂钩函数).目前,gtest提供了三种等级的事件,分别: 全局级,所有案例执行的前后 TestSuite级,某一个案例集的前后 TestCa ...

  7. mongodb复制+分片集原理

    ----------------------------------------复制集---------------------------------------- 一.复制集概述: Mongodb ...

  8. python day08

    ascii码转换成字符:ord(str) 字符串转换成ascii:chr(int) 三种字符串 1.普通字符串 --以字符作为输出单位 print(u'abc') 显示给用户看的字符串 2.二进制字符 ...

  9. CSS问题

    当标签之间有缝隙  两个a标签之间消除缝隙  可在div设置 font-size:0 ul下的li去掉小圆点:设置 ul list-style:none <div> <a> & ...

  10. Activiti开发案例之activiti-app工作流导出图片

    前言 自从 Activiti 和 JBPM4 分家以后,Activiti 目前已经发展到了版本7,本着稳定性原则我们最终选择了6,之前还有一个版本5. 问题 在开发使用的过程中发现 Activiti ...