![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
javascript
文章平均质量分 60
hfhan_872914334
前端开发
展开
-
V8是怎么执行JS代码的
1、V8的演进历史2008年V8发布第一个版本,当时的V8架构比较激进,直接将js代码编译为机器码并执行,所以执行速度很快,但是只有Codegen一个编译器,所以对代码的优化很有限。2010年V8发布了Crankshaft编译器,js代码会先被Full-Codegen编译器编译,如果后续改代码块会被多次执行,则会用Crankshaft编译器重新编译,生成更优化的代码,之后就使用优化后的代码来执行,进而提升性能。Crankshaft编译器对代码的优化有限,所以2015年V8中加入了TurboFa原创 2022-04-01 10:33:23 · 721 阅读 · 0 评论 -
arcgis图层数据查询
有时候我们需要根据发布的arcgis服务查询服务上的一些数据,比如点击地图上的某个位置,比如根据某个关键字进行要素查询等等,而arcgis关于这方面的api常用的有三个:find、query和identify。一、find查询查找操作在地图服务资源上执行。此操作的结果是查找结果资源。每个结果都包含其值,要素ID,字段名称,图层ID,图层名称,几何图形,几何类型以及名称 - 值对形式的属性。api说明:http://xxx/arcgis/sdk/rest/index.html#/Find/02ss000原创 2021-05-07 16:37:36 · 4120 阅读 · 0 评论 -
常用空间分析函数
常用空间分析函数包含 点、线、面 之间的相互关系本文主要记录一些自己开发中常用的一些分析函数,比较正宗和全面的可以看一些空间分析库,比如前端的 Turf 和 JSTS1、点1.1、点到点的距离//点到点的距离function dist2d(coord1, coord2) { let dx = coord1[0] - coord2[0]; let dy = coord1[1] - coord2[1]; return Math.sqrt(dx * dx + dy * dy)}dist原创 2020-12-23 14:53:06 · 1859 阅读 · 2 评论 -
对三次贝塞尔曲线过点平滑中尖角和交叉现象的优化
目前在做等值线等值面相关的功能,用户可拖拽控制点修改等值线,再用等值线生成等值面。因为初始的等值线点数据太多,不利于用户操作,所以先使用道格拉斯-普克算法(Douglas–Peucker)进行等值线抽稀,再将抽稀后的控制点使用贝塞尔曲线算法进行平滑。对于贝塞尔曲线算法的平滑过程,有人做了很详细的示意图,推荐大家看下贝塞尔曲线算法之JS获取点可以了解到贝赛尔曲线算法平滑得到的曲线是经过起始点的,同时二阶算法需要三个点,三阶算法需要四个点,四阶算法需要五个点,以此类推。一般的来说,三阶贝塞尔曲线就已经够用原创 2020-10-09 17:10:14 · 1619 阅读 · 3 评论 -
图解JavaScript——进阶篇(执行上下文、变量对象、作用域、作用域链、闭包、this、原型及原型链、事件循环等一把梭)
一、函数执行过程本节主要从代码整个执行过程出发,然后阐述遇到函数后如何执行,紧接着分点对执行过程中的关键知识点(执行上下文、变量对象、作用域、作用域链、this指向、闭包、原型、原型链等)进行阐述,按照自己的理解将整个过程进行了叙述。1.1 JavaScript代码的整体执行过程1.2 函数执行过程1.3 执行上下文1.4 变量对象1.5 作用域1.6 JavaScript查询方式1.7 作用域链1.8 闭包1.9 this1.10 new1.11 原型/构.转载 2020-06-16 11:49:28 · 176 阅读 · 0 评论 -
vue-数据监听与依赖收集
文章围绕下面demo进行分析<div id="app"> <span>{{a.b}} {{c}} {{d}}</span></div><script> var app = new Vue({ ...原创 2020-04-19 19:38:06 · 581 阅读 · 0 评论 -
JS禁止打开控制台
主要为了通过禁止打开控制台,防止别人进行代码调试。1、禁止右键查看源码和F12//禁止F12键盘事件document.addEventListener('keydown', function(event){ return 123 != event.keyCode || (event.returnValue = false)});//禁止右键、选择、复制document.addE...原创 2020-01-03 16:17:03 · 1744 阅读 · 0 评论 -
openlayers判断两个多边形的空间关系
1、 使用truf库的booleanContains函数,这个函数可以检测两个几何是否为包容关系使用:引入相关函数,因为truf识别的geometry不是openlayers中的geometry,所以需要使用其提供的函数,转换成对应的geometryimport booleanContains from '@turf/boolean-contains'import {geometry, po...原创 2019-11-05 18:25:23 · 2077 阅读 · 1 评论 -
【面向JS--DOM节点】
DOM: Document Object Model专门操作网页内容的APIjs组成:ECMAScript(核心语法)+DOM+BOM(Browser Object Model)DOM 树:浏览器为页面中每个内容分别创建节点对象所有节点都是按上下级包含关系在内存中以树形结构存储节点: 封装网页中任意一项内容的属性的对象包括: 1、根节点:document对象原创 2017-11-09 17:50:31 · 269 阅读 · 0 评论 -
【面向JS--DOM 递归API】
1、NodeIterator按照深度优先的顺序,依次遍历每个节点对象深度优先: 优先遍历一个节点的下级节点,只有下级节点遍历完,才遍历兄弟节点如何使用: 2步:1、创建NodeIterator对象:var iterator = document.createNodeIterator( root, whatToShow, filter,entityReferenceEx原创 2017-11-09 18:03:22 · 368 阅读 · 0 评论 -
【面向JS--DOM 操作API】
选取元素1、按HTML属性选取: 1、按id查找: var elem=document.getElementByid("id"); 返回一个元素对象。如果未找到,返回null2、按标签名查找: 返回动态集合 var elems=parent.getElementsByTagName("tagName"); 不但找直接子元素,而且还找所有子元素3、按na原创 2017-11-09 19:10:40 · 233 阅读 · 0 评论 -
【面向JS--DOM加载过程】
DOM加载过程:layout: 重新计算布局——效率低只要改变DOM树上的元素,都会重新layout——效率更低如何减少layout的次数:先在内存中拼凑要添加的DOM子树,然后一次性挂到页面,只会触发一次layout——效率提高目前前端三大框架中的 vue 与 React 采用的虚拟DOM思想,就是在极大的程度上减少了layout的次数。把要生成的DOM存在文档片段中,最原创 2017-11-10 09:22:05 · 380 阅读 · 0 评论 -
【面向JS--HTML DOM常用对象】
Image对象:指代一个img元素var img =new Image();//只有image和option可newSelect对象: 指代一个select元素属性: options: 包含一个select下所有option元素对象的集合 length:直接获得select下option的个数-->options.length value:有value返回va原创 2017-11-10 11:22:44 · 382 阅读 · 0 评论 -
【面向JS--BOM】
BOM(Browser Object Document)即浏览器对象模型。BOM提供了独立于内容 而与浏览器窗口进行交互的对象;由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象是window;BOM由一系列相关的对象构成,并且每个对象都提供了很多方法与属性;JavaScript语法的标准化组织是ECMA,DOM的标准化组织是W3C,而BOM缺乏标准,BOM最初是Netsc原创 2017-11-14 12:50:42 · 211 阅读 · 0 评论 -
【面向JS--定时器】
定时器分为 周期性定时器 和 一次性定时器周期性定时器: 让程序每隔一段时间间隔,反复执行一项任务如何使用: 3步:1、声明任务函数: 定时器每次执行的任务 function task(){...} 任务函数通常要自己考虑:何时停止定时器的临界值2、将任务函数放入定时器,定时执行: timer=setInterval(task,interval) 其原创 2017-11-14 17:41:41 · 229 阅读 · 0 评论 -
【面向JS--事件】
事件:event:浏览器自动触发的或用户手动触发的页面状态的改变事件处理函数: 当事件发生时自动调用的函数当希望在事件发生时,自动调用一个函数,都要在事件发生前,将函数绑定到事件属性上如何绑定: 3种: 1、在html中绑定: <ANY on事件名="js语句" 比如: <button onclick="fun()" 问题: 不符合内容与行为分离的原则,不便于维护!原创 2017-11-15 14:42:15 · 191 阅读 · 0 评论 -
【面向JS--元素定位】
1、offset系列方法offset示意图2、scroll系列方法scroll示意图3、client系列clientX和clientY 获取鼠标在可视区域的位置 clientX = width + paddingclientY = height + paddingclientLeft 边框的宽度,若有滚动条的话,包括滚动条cl原创 2017-11-15 15:49:31 · 1844 阅读 · 0 评论 -
判断一个对象是不是数组,有几种办法?
这是一个出现过无数次的话题,这里再次重写仅作为个人的学习笔记,谢谢观看。0、typeoftypeof 运算符的主要作用就是用来检测数据的类型,一般情况下我们都是使用它来判断数据类型,但是这里,我把typeof 放在0的位置,因为 typeof 不能检测到数组类型!typeof 所能识别的类型只有原始类型(Undefined,Null,Boolean,Number,String,Symb...原创 2018-03-07 17:04:02 · 2882 阅读 · 0 评论 -
JS开发常用工具函数
1、isStatic:检测数据是不是除了symbol外的原始数据function isStatic(value) { return( typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'undefined' || v...原创 2019-06-27 17:11:49 · 424 阅读 · 0 评论 -
canvas绘制验证码
没什么好说的,如题,利用canvas绘制验证码,代码里有注释,应该说很清楚 ☻<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title>canvas绘制验证码</title></head原创 2018-03-07 17:07:16 · 568 阅读 · 0 评论 -
【面向JS--ES5保护对象】
前言你知道吗,对象的属性也是有属性的!js中对象的普通属性,随时可别修改为任何值,随时可添加新属性,随时可被删除。这是因为对象的属性默认是可操作的,而通过修改对象属性的属性,我们可以设置对象属性的可操作性。我们设置的目的就是 保护对象 和 保护属性回顾Object.create(): 基于一个父对象,创建一个子对象,并为子对象扩展新属性。var son=Object.create(父对象,{原创 2017-10-14 11:07:52 · 834 阅读 · 0 评论 -
【面向JS--this】
前言JS中的 this 和原型链、闭包一样,是谈及最多的问题,网上找这类的材料能找一大堆。this 本身原本很简单,它不能脱离 类/对象 来说,也就是说 this 是面向对象语言里常见的一个关键字,它不能赋值,总是指向类的当前实例。this说白了就是找大佬,找拥有当前上下文(context)的对象(context object)。大佬可以分为六层,层数越高权力越大,this只会认最大的。第一层:世界原创 2017-10-14 10:41:35 · 192 阅读 · 0 评论 -
【面向JS--数组】
数组:内存中连续存储多个数据的存储空间,再起一个统一的名字。为什么使用数组:连续存储的多个数据便于维护和查找vs 变量 : 一个变量中只能存一个数据,可随处声明如何使用:创建 赋值 取值创建数组1、创建空数组:var arr = []; -->js中见到[ ],就是数组var arr = new Array();何时: 创建数组时,暂时不知道数组的内容2、创建数组,同时初始化原创 2017-10-11 16:15:19 · 284 阅读 · 0 评论 -
【面向JS--正则表达式】
规定一个字符串中字符出现规律的表达式。正则表达式跟js没有关系但是很重要。何时使用:使用一种规则,模糊匹配关键词时。比如:验证字符串格式、 模糊查找、替换/格式化字符串、切割字符串语法:1、最简单的正则:就是关键字原文(字符串本身)2、备选字符集:规定了某一位可选的字符列表,必须且只能多选一匹配语法: [备选字符列表]强调:一个中括号,必须且只能匹配一位。两个中括号,则匹配两个比如: 一位数原创 2017-10-11 11:07:08 · 259 阅读 · 0 评论 -
【面向JS--内置对象与包装类型】
内置对象ES标准已经规定好,由浏览器厂商已经实现的对象一共有11个(就是API):开发人员直接使用,不必关心具体实现。String --包装类型 Number --包装类型 Boolean --包装类型,和小写的不同。Array Date RegExp(正则表达式) MathErrorFunction(所有函数的祖宗) Object(所有对象的祖宗)Global(全局)-->就原创 2017-10-11 09:48:27 · 316 阅读 · 0 评论 -
【面向JS--分支结构、循环结构】
程序3种结构:顺序 分支 循环顺序:除去声明提前,其余代码默认都从上向下顺序执行分支:根据不同的条件,执行不同的代码循环:让程序反复执行一段相同代码。程序的流程控制程序=数据结构 + 算法 数据:程序运行过程需要用到的数值 算法:解决问题的思路任何复杂的程序都可以通过以下几种结构表示: 1、顺序结构 按顺序执行代码,自顶向下原创 2017-10-09 17:42:17 · 628 阅读 · 0 评论 -
【面向JS--运算符】
什么是运算符?什么是表达式?运算符:指定数据运算方式的符号,+,-,*,/...表达式:由运算符和操作数所组成的式子,叫表达式 ex: 1、a+b 2、a=5; 3、var result = 35+7 * 2 / 3 注意:每一个表达式,都有自己的运算结果运算符详解1、算术运算符+,-,*,/,%,++,–…原创 2017-10-09 16:26:46 · 261 阅读 · 0 评论 -
【面向JS--数据类型转换】
1、弱类型js是弱类型编程语言:特点(3点): 1、声明变量时,不用考虑变量中将要存储的数据类型 2、赋值时,动态判断数据的类型 因为是动态判断同一个变量,先后可保存不同类型的数据。 3、运算时,js会根据自己的需要,动态转换数据类型变量的类型是由数据来决定的。通过一个函数 或 运算符 验证变量的数据类型:函数:typeof(变量名)运算符:typeof 变量原创 2017-10-09 15:43:38 · 196 阅读 · 0 评论 -
【面向JS--数据类型】
数据类型:数据在内存中的存储形式1、什么是数据类型问:想保存一个整数到内存中,应该占据多大空间?保存在内存中数据的真实类型,约束了数据在内存中所占的空间大小2、数据类型分类2大类:原始类型的值和引用类型的对象1、原始类型(基本数据类型)值直接保存在变量本地的类型(值为一个,而且不能特别复杂)原始类型5类:Number String Boolean und原创 2017-10-09 15:20:17 · 172 阅读 · 0 评论 -
【面向JS--变量和常量】
变量1、什么是变量量:数据变量:变化的数据内存:保存程序在运行过程中所需要用到的数据变量:内存中的一段存储空间,用于保存数据值:变量中所保存的数据变量名:内存地址的别名即保存数据的空间的名称。2、变量的声明1、声明变量 到内存中,申请一个空间 var 变量名;2、为变量赋值 将数据保存在变量中 变量名 = 值;3、声明变量并原创 2017-10-09 15:01:14 · 235 阅读 · 0 评论 -
【面向JS--走进JS】
JS概述1、什么是JSJavaScript,简称JS。JS是一种运行于 JS解释器/引擎 中的解释型脚本语言。是一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。运行环境:J原创 2017-10-09 14:39:25 · 378 阅读 · 0 评论 -
【面向JS--数组API】
数组API:浏览器厂商已经实现的方法,开发人员直接调用,不需要了解具体实现。将数组转化为字符串:2个,hash数组不是正经的数组。1). var str=arr.toString(); 返回数组中元素的内容,用逗号分隔 (除了null和undefined都有toString,返回数组中元素的内容,用逗号分隔)2). var str=arr.join("连接符"); 可自定义连接符,不修改原原创 2017-10-11 16:58:26 · 291 阅读 · 0 评论 -
【面向JS--数组遍历】
数组遍历:循环得到数组中的每一个元素。最基本的数组遍历就是循环结构,for循环 while循环等。此处只说一说为方便我们开发而那些内置的方法:1、forEach缺点:不能中断循环,没有break/continue方法。var arr=[1,2,3,4,5,6];arr.forEach(function(value,index){ if(index < 5){ console原创 2017-10-11 17:06:36 · 175 阅读 · 0 评论 -
【面向JS--apply、call、bind】
js 里函数调用有 4 种模式:方法调用、正常函数调用、构造器函数调用、apply/call 调用。同时,无论哪种函数调用除了你声明时定义的形参外,还会自动添加 2 个形参,分别是 this 和arguments。今天我要讲的就是 apply/call 调用,这是一对好基友,而讲到 apply/call 却总是要提到他们的另一个好基友 bind。apply、call在 javascript 中,ca原创 2017-10-13 23:12:43 · 200 阅读 · 0 评论 -
【面向JS--面向对象和原型】
什么是对象和面相对象对象:封装一个事物的属性和功能的程序结构。本质:内存中保存多个属性和方法的一块存储空间,再起一个名字。—&gt;相对于变量面向对象:OOP(面向对象程序设计):程序中,描述一具体事物都要用对象来封装事物的属性和功能。优点: 便于大程序的维护三大特点: 封装,继承,多态封装封装就是将一个事物的属性和功能集中定义在一个对象中优点: 便于大程序的维护...原创 2017-10-13 17:26:37 · 455 阅读 · 0 评论 -
【面向JS--闭包】
上一篇文章讲了局部变量与全局变量,我们来回顾一下。全局变量 vs 局部变量全局变量:优:反复使用,且共享使用 缺:可能随时在任意位置被篡改——全局污染 建议:尽量避免使用全局变量局部变量:不可反复使用!方法调用完自动释放解决:闭包:反复使用一个局部变量,且不会被污染可以看到,当我们希望即重用变量,又保护变量不被污染时,可以使用闭包,那什么是闭包? 闭包: 即重用原创 2017-10-12 15:53:11 · 200 阅读 · 0 评论 -
【面向JS--函数】
1、函数的定义函数(function),又称为 方法(Method),或过程(procedure)是一段预定义好,并可以被反复使用的代码块预定义:事先定义好,不会马上被执行反复使用:可以被多个地方所应用代码块:由多条可执行语句所组成的结构(函数体)其实,函数就是一个封装代码段的对象,函数名只是一个引用函数对象的变量函数是一个引用类型的对象2、函数声明语法:function 函数名(){原创 2017-10-12 12:29:12 · 208 阅读 · 0 评论 -
【面向JS--错误处理】
错误处理错误(bug): 在程序执行过程中造成异常中断的原因发生错误: 程序会中断退出错误处理: 即使发生错误,也能保证程序不异常中断的机制try{ 可能出错的代码; //一旦出错,会自动创建err对象}catch(err){//只在出错时才执行 错误处理代码: 1. 记录日志, 2. 提示用户}finally{ 无论是否发生错误,都必须执行的代码: 释原创 2017-10-12 09:31:37 · 272 阅读 · 0 评论 -
【面向JS--Date对象】
Date: 专门封装一个时间,并提供访问时间的API。封装了1970年1月1日0点至今的毫秒数,只要在程序中保存日期或者时间就需要用到Date对象。创建:4种: 1、 创建时间,并自动保存客户端系统时间: var now=new Date();2、创建时间,并保存自定义时间: var date=new Date("yyyy/MM/dd hh:mm:ss");var date=new Date(y原创 2017-10-12 09:23:55 · 212 阅读 · 0 评论 -
【面向JS--Math对象】
Math对象专门封装数学计算的常量和API 没有构造函数,不能实例化对象,即不能new!都是直接使用!1、取整: 上取整 Math.ceil(num)Math.ceil(345.678) => 346 下取整 Math.floor(num) //将一切都转为数字,再取整对比 parseInt(str) //将一切都转为字符串,再按位读数字字符 参数是数字,两者无差别: Mat原创 2017-10-11 17:37:23 · 213 阅读 · 0 评论