JS 函数实参转换为数组
实际参数在函数中我们可以使用 arguments 对象获得 (注:形参可通过 arguments.callee 获得),虽然 arguments 对象与数组形似,但仍不是真正意义上的数组。
0: […arguments]这个方法其实是用来代替下边方法一的
一:通过 Array.prototype属性调用 slice 方法1const args = Array.prototype.slice.call(arguments)
Array 本身是没有 slice 方法,它的方法在 Array.prototype中,而我们在调用 slice 方法的时候,如果在 Array 本身没有找到 slice 方法的话,会通过它的原型链往上查找。
二. 通过调用[]的slice方法1const args = [].sclice.call(arguments, 0)
注意这里是[], 不是 Array,为什么呢? 先看下边
12345typeof []; // objecttypeof Array; // Funcion[].__proto__ === Array.prototype; // t ...
JS new 一个对象的过程
首先让我回忆一下创建对象的三种方法
单休模式
1234567891011const Person = { name: "angelee", sayname: function() { return this.name; }}let ahui = Object.create(Person);ahui.name = "ahui"console.log(ahui.sayname()) // ahui
构造函数
123456789const Person = function (name) { this.name = name;}Person.prototype.sayname = function () { return this.name;}let ahui = new Person("ahui");console.log(ahui.sayname()); // ahui
ES6 class
1234567891011121 ...
JS prototype
在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例。但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不是基于‘类的’,而是通过构造函数(constructor)和原型链(prototype chains)实现的。
在ES6中提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让原型对象的写法更加清晰、更像面向对象编程的语法而已。
构造函数(constructor)的简单介绍 所谓构造函数,就是提供了一个生成对象的模板并描述对象的基本结构的函数。一个构造函数,可以生成多个对象,每个对象都有相同的结构。总的来说,构造函数就是对象的模板,对象就是构造函数的实例。构造函数的特点有: a:构造函数的函数名首字母必须大写。 b:内部使用this对象,来指向将要生成的对象实例。 c:使用new操作符来调用构造函数,并返回对象实例 ...
JS 数据类型你应该知道的可不止这些
基本数据类型string, number, boolean, null, undefined
基本数据类型的变量是保存在栈内存中的,基本数据类型的值直接在栈内存中存储,值与值之间是独立存在的,修改一个变量不会影响其他的变量
当比较两个基本数据类型的值时,本质上是比较值
引用类型object
对象是保存在堆内存中的,每创建一个新的对象,就会在堆内存中开辟出一个新的空间,而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,当修改其中一个变量修改属性时,另一个也会受到影响
当比较两个引用数据类型时,本质上是比较的对象的内存地址,如果两个对象的属性是一模一样的,但是地址不同,也会返回false。
数据结构中的栈和堆 栈 :这是一种连续存储的数据结构,具有先进后出的性质。通常具有的操作有出栈、入栈(压栈)和取栈顶元素。想要读取栈中的某个元素,就必须将其之前所有的元素出栈才能完成。
堆:这是一种非连续的树形存储数据结构,每个节点都有一个值,整棵树是经过排序的。特点是根节点的值最小(或最大),且根节点的两个子树也是一个堆。常用来实现优先队列,存取 ...
JS dom元素位置相关的内容
offsetWidth: 返回元素的宽度(包括元素宽度 + 内边距 + 边框,不包括外边距)
offsetHeight: 返回元素的高度(包括元素高度 + 内边距 + 边框,不包括外边距)
clientWidth: 返回元素的宽度(包括元素宽度 + 内边距,不包括边框和外边距)
clientHeight: 返回元素的高度(包括元素高度 + 内边距,不包括边框和外边距)
style.width: 返回元素的宽度(包括元素宽度,不包括内边距、边框和外边距)
style.height: 返回元素的高度(包括元素高度,不包括内边距、边框和外边距)
scrollWidth: 返回元素的宽度(包括元素宽度 + 内边距 + 溢出尺寸,不包括边框和外边距),无溢出的情况,与clientWidth相同
scrollHeigh: 返回元素的高度(包括元素高度 + 内边距 + 溢出尺寸,不包括边框和外边距),无溢出的情况,与clientHeight相同
style.width 返回的是字符串,如28px,offsetWidth返回的是数值28;
style.width/style.heig ...
eslint 常用配置中文注释
注意这里的数字:0表示不不处理,1表示警告,2表示错误并退出这里的 0,1,2 也可以用 off, warn, error, 表示:
“off”或者0 //关闭规则关闭“warn”或者1 //在打开的规则作为警告(不影响退出代码)“error”或者2 //把规则作为一个错误(退出代码触发时为1)
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813 ...
学习笔记3 常见运算题
一些讲运算结果类型的面试题【不定时更新】
1234567891011var name = "Hello";var object = { name: "world", getNameFunc: function() { return function() { return this.name; }; }};console.log(object.getNameFunc()()); // Hello
object.getNameFunc() 返回的就是一个 function,function () { return this.name }
123456789101112var name = "Hello";var object = { name: "world", getNameFunc: function() { var that = this; return ...
react render 原理
JSX 代码经过 babel 编译之后变成 React.createElement 的表达式,这个表达式在 render 函数被调用的时候执行生成一个 element。
在首次渲染的时候,先去按照规则初始化 element,接着 ReactComponentComponentWrapper 通过递归,最终调用 ReactDOMComponent 的 mountComponent 方法来帮助生成真实 DOM 节点。
地址一: React 从渲染原理到性能优化(一)
地址二: React 从渲染原理到性能优化(二)– 更新渲染
学习笔记2 JS基础知识
课程地址: JavaScript 基础知识
基础数据类型js 数据类型: ‘usbno’
undefined: 未定义stringbooleannumberobjectnull
JS 基本数据类型: undefined, string, number, boolean, null
function 不是数据类型object 是复杂数据类型
NaNnot a number
isNaN 跟谁都不相等, 包括它本身typeof NaN // “number”
检测一个变量是不是 NaN
ES6: isNaN()ES5: a != a 为 false 不是 NaN, 为 true 则是 NaN
js 作用域链当前函数作用域找不到的时候就去它的父级找
123456789var a = 666;function show() { var a = 233; show2();}function show2() { console.log(a);}show(); // 666
这是因为 show2 所在的位 ...
学习笔记1 ES6
课程地址: 【JS 老毕】Javascript ES6 基础+核心课程
9. 字符串方法和 for ofincludes 是否包含,返回 true/false
123const string = "abc";const substring = "ab";console.log(string.includes(substring)); // true
startsWith 是否是以某个字符串开始, 返回 true/falseendsWith 是否是以某个字符串结尾, 返回 true/false
123const string = "abc";const substring = "ab";console.log(string.startsWith(substring)); // true
for of
123456789101112131415161718192021222324252627const tests = ["a", "b" ...