![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
js学习
文章平均质量分 54
飞天大屁
这个作者很懒,什么都没留下…
展开
-
欺骗词法作用域
欺骗词法作用域:在运行时修改词法作用域1.eval:function foo(str,a){ eval(str); console.log(a,b)}var b = 2;foo("var b = 3",1) //1,3执行foo()函数时eval()改变可foo的作用域,var b = 3 会对作用域修改,添加局部的b变量。2.with:with的作用域随着他传入的参数不同而修改作用域var obj = { a:1, b:2, c:3}with(obj){ a=3; b原创 2021-06-07 14:27:10 · 109 阅读 · 0 评论 -
手写new、apply、call、bind
// 手写实现new方法// function _new(ctor, ...args) {// let obj = new Object();// //// obj.__ptoto__ = Object.create(ctor.prototype);// // 执行构造函数// ctor.apply(obj, [...args]);// return obj// }// //手写实现apply方法// Function.prototype原创 2021-06-02 09:46:45 · 94 阅读 · 0 评论 -
RegExp
匹配模式:g-全局、i-不区分大小写、m-多行匹配字面量:var pattern1 = /[bc]at/i;var pattern2 = new RegExp("[bc]at", "i");RegExp属性:global:布尔值,是否设置了g标志ignoreCase:布尔值,是否设置了i标志lastIndex:整数,开始搜索下一个匹配项的字符位置multiline:布尔值,是否设置了m标志source:正则表达式的字符串表示RegExp方法:exec():pattern.exec(原创 2021-05-28 11:14:30 · 83 阅读 · 0 评论 -
手写new方法
new的过程:1.创建一个对象 let obj = {}2.将构造函数的作用域赋给新对象 _class.call(obj)3.执行构造函数的代码,返回新对象 function newMethod(_class,...rest) { // 1.以构造器的prototype为原型创建新对象 let object = Object.create(proto, propertiesObject) //2.改变构造函数的this指向,传入参数原创 2021-05-21 16:21:08 · 148 阅读 · 0 评论 -
Ajax、跨域请求
Ajax:Asychronous JavaScript XML的简写。可以向服务器请求额外的数据而无须加载页面。请求到的数据格式并不一定是XML。XMLHttpRequest对象://兼容ie7以上的创建xhr对象var xhr = new createXHR() {//检测原生XHR对象是否存在,如果存在则返回实例。如果不存在则检测ActiveX对象。如果这两种对象都不存在就报错 if (typeof XMLHttpRequest != "undefied") { return new XM原创 2021-05-15 16:28:58 · 135 阅读 · 0 评论 -
深、浅拷贝
浅拷贝:创建一个新对象,如果拷贝对象式基础数据类型,复制值给新对象。如果式引用数据类型,复制内存中的地址给新对象。深拷贝:对于引用数据类型,在堆内存中完全开辟一块地址,并将对象复制过来存放。浅拷贝的方法:1.es6中的object.assign()let target = {};let source = { a: { b: 2 } };Object.assign(target, source);console.log(target); // { a: { b: 10 } }; source.原创 2021-05-04 16:42:44 · 59 阅读 · 0 评论 -
类和继承
工厂函数:inherit(原型对象):函数返回一个新创建的对象,这个对象继承自某个原型对象通过工厂函数创建并初始化类的实例function range(from, to) { var r = inherit(range.methods); r.from = from; r.to = to; return r;}//range.methods为原型对象,这些方法为每个范围对象所继承range.methods = { includes: function (x) { return th原创 2021-05-04 15:07:55 · 69 阅读 · 0 评论 -
json
json:只是一种数据格式,并不是一种编程语言是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯。json可以表示三种类型的值:简单值(基本数据类型)、对象、数组1.简单值:json字符串必须使用双引号,单引号会导致语法错误,其他的正常表示。2.对象:json的对象要求给对象的属性加双引号。json也不用声明变量,结尾没有分号3.数组:也不用声明变量,也不用分号结尾。var txt = '{ "employe原创 2021-05-02 18:18:40 · 135 阅读 · 0 评论 -
eval
eval():可以解释运行js源代码组成的字符串,并产生一个值。eval()是一个函数还是一个运算符eval()只有一个参数,如果传入的参数不是字符串,它直接返回这个参数,如果传入的是字符串,编译失败则会抛出一个语法错误/syntaxError。eval()的上下文是调用它的函数。如果给eval()起一个别名,且用另一个名称调用它,那么它的上下文会变成全局。var geval = eval;var x = "global", y = "global";function f() { var x原创 2021-05-02 13:42:21 · 74 阅读 · 0 评论 -
es6的set、map
ES6加入Set和Map是为了弥补ES5单集合类型的缺点,为了进行非数值类型的索引。Set:不包含重复值的列表。Map:键值对的集合。ES5有模拟set、map的使用,但是存在弊端:1.如果存在一个数值键5和一个字符键5,在进行索引值的时候着两者都是指向的字符5的值,对象转换为默认的字符串的表现形式,时的对象很难被当作Map的键。2.在需要布尔值的时候:let map = Object.create(null);map.count = 1;// 是想检查 "count" 属性的存在性,还是想原创 2021-04-30 18:50:34 · 169 阅读 · 0 评论 -
力扣刷题
找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-z原创 2021-04-28 16:28:32 · 118 阅读 · 0 评论 -
严格模式
严格模式:采用具有限制性JavaScript变体的一种方式,从而使代码显示地 脱离“马虎模式/稀松模式/懒散模式“(sloppy)模式。严格模式不仅仅是一个子集:它的产生是为了形成与正常代码不同的语义。不支持严格模式与支持严格模式的浏览器在执行严格模式代码时会采用不同行为。所以在没有对运行环境展开特性测试来验证对于严格模式相关方面支持的情况下,就算采用了严格模式也不一定会取得预期效果。严格模式代码和非严格模式代码可以共存,因此项目脚本可以渐进式地采用严格模式。严格模式对正常的 JavaScript语原创 2021-04-27 19:19:31 · 225 阅读 · 1 评论 -
XML
XML:Extensible Markup Language,是一种可扩展标记语言。1.xml可以传输和存储数据,html是显示数据设计数据的外观。2.xml是结构化、存储、传输信息,没有作为的。3.xml没有预定义标签,html中的是自己定义的。4.通过xml,数据可以被各种设备、平台复用,可以在不同系统之间进行数据传输。5.xml把html的数据进行了分离,通过js进行读取。<?xml version="1.0" encoding="ISO-8859-1"?>XML标签XML原创 2021-04-26 15:15:09 · 69 阅读 · 0 评论 -
原型链
通过New生成的对象:var fun1 = new Function();fun1.proto //{constructor: ƒ}fun1.prototype //undefinedfun1.proto.prototype //undefinedfun1.proto.proto //{a: ƒ, constructor: ƒ, defineGetter: ƒ, defineSetter: ƒ, hasOwnProperty: ƒ, …}fun1.proto.proto.pr原创 2021-04-25 17:51:49 · 33 阅读 · 0 评论 -
隐式转换
1.转成string:+2.转成Number:++/–、±*/、> < >= <= == != === !===3.转换成boolean:!1 + "true" // "1true" 数字与字符转字符,数字与其他转其他1 + true //2 1 + undefined //NaN1 + null //1"2" > 10 //false "2" > "10" //true"abc" > "aad" //trueN原创 2021-04-25 15:13:22 · 148 阅读 · 0 评论 -
闭包
var scope = "global scope" function checkscope() { var scope = "local scope" function f() {return scope} return f() } // 这里将嵌套函数f()的返回值保存在checkscope()的返回值里 //这里的f()的作用域链在执行完return ...原创 2021-04-22 20:37:35 · 49 阅读 · 0 评论 -
callee
callee和caller属性:实参对象的属性,这个属性指代当前正在执行的函数,通过calllse属性可以访问调用栈。 var factorial = function(x) { console.log(arguments.callee); } factorial()//ƒ (x) {console.log(arguments.callee); }...原创 2021-04-22 19:56:08 · 89 阅读 · 0 评论 -
js手写实现日期格式化
var date = new Date(); console.log(date);//Thu Apr 22 2021 14:12:21 GMT+0800 (中国标准时间) //这里定义两个参数,一个日期,一个格式化格式 function formateDate(date, fmt) { //对年格式化,利用正则表达式匹配y的个数,然后再截取对应的年的位数 //因为年是四位,所以单独进行 if (/(y...原创 2021-04-22 14:23:10 · 533 阅读 · 0 评论 -
数组排序
1.冒泡排序算法思想:比较相邻元素,进行排序。每次白遍历会冒泡一个最大或最小值(这取决于你是降序还是升序),然后每次对除过冒泡出去的元素外再进行遍历。 let arr = [23, 34, 3, 4, 23, 44, 333, 1]; function bubbleSort(arr) { for (let i = 0; i < arr.length - 1; i++) { for (let j = 0; j..原创 2021-04-19 21:17:37 · 74 阅读 · 0 评论 -
数组扁平化
数组扁平化:将多维数组转化为以一维数组方法一:递归var a = [1,[2,[3,4,5]]];function flatten(a) { let result = []; for (let i = 0; i< a.length; i++) { if (Array.isArray(a[i])) { result = result.concat(flatten(a[i])) }else{ result.push(a[i]) } }}//对数组每一项进行遍历,对于原创 2021-04-18 20:57:10 · 65 阅读 · 0 评论 -
类数组
类数组:函数里面的参数arguments;用getElementsByTagName/className/Name得到的HTMLCollection;通过querySelector获得的NodeListargumennts有一个length属性表示长度、callee属性返回参数的函数,调用这个方法会不停的执行当前函数直到执行到内存溢出。HTMLCollection是DOM对象的一个结构,包含了DOM元素集合,文档DOM的更新也会更新它。NodeList对象是节点的集合。这些类数组可进行的操作原创 2021-04-18 20:06:16 · 374 阅读 · 0 评论 -
字符串、数字、数组的简单操作方法
String方法: var str = "abcabc"; console.log(str.length); //返回字符串长度,属性 6 console.log(str.indexOf("b")); //返回字符串出现的第一个字符的位置 1 console.log(str.lastIndexOf("b")); //从右边开始字符串出现的第一个位置 4 console.log(str.search("bc")); //1原创 2021-04-12 20:07:41 · 134 阅读 · 0 评论 -
变量、变量的引用以及作用域
变量:js变量的本质是一个特定时间里保存特定值的名字,它的类型可以在生命周期里改变。基本数据类型:Undefined、Null、Bollean、Number、String、symbol(es6新增)引用数据类型:object(Array、RegExp、Date、Math、function)基本数据类型复制:将值拷贝一份赋给变量,改变一个值对另外一个没有影响引用类型复制:复制栈中堆内存地址给变量,新变量和旧变量指向同一个对象,改变对象里的属性会影响其他变量的引用。函数的参数传递都是值传递(参数的本质原创 2021-04-11 23:37:27 · 268 阅读 · 0 评论