
javascript
DaftJayee
这个作者很懒,什么都没留下…
展开
-
转化为布尔值的规则
对于基本类型的数据:null和undefined直接转化为false字符串:空字符串转化为false,其他全为true数字:0和NaN转化为false,其他全为true对于引用类型数据:全为true所以 [] == ![]的结果是true分析:== 中,左右两边都需要转换为数字然后进行比较。[]转换为数字为0。![] 首先是转换为布尔值,由于[]作为一个引用类型转换为布尔值为true,因此![]为false,进而在转换成数字,变为0。0 == 0 , 结果为true...原创 2021-04-17 12:33:24 · 1279 阅读 · 0 评论 -
[数据结构与算法]给出页面高度,一行展示多张图片,并且图片高度对齐 JavaScript
给出页面高度,一行展示多张图片,并且图片高度对齐function alignImages(imgs, width){...} alignImages([[1, 1], [1, 1]], 3) // [[1.5, 1.5], [1.5, 1.5]]alignImages([[2, 4], [2, 2], [2, 4]], 4) // [[1, 2], [2, 2], [1, 2]] 字符图实例:a表示[2, 4](宽为2,高为原创 2020-10-22 22:40:42 · 456 阅读 · 0 评论 -
[JavaScript]Array的map方法会不会改变数组
结论:1.数组是值类型的,则不会改变原数组,2.数组是引用类型的数组,如果改变数组选项中的引用类型的值则原数组会发生改变。原创 2020-10-22 22:28:59 · 1134 阅读 · 0 评论 -
前端性能优化:细说浏览器渲染的重排与重绘
https://juejin.im/post/6844903641816514573转载 2020-10-11 21:48:35 · 173 阅读 · 0 评论 -
[数据结构与算法]最长回文子串(动态规划)
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic-substring题解:/** * @param {string} s * @return {string} */原创 2020-10-11 19:00:24 · 196 阅读 · 0 评论 -
[数据结构与算法]合并K个升序链表 (利用堆) JavaScript
给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:lists = []输原创 2020-10-05 23:41:35 · 252 阅读 · 0 评论 -
[数据结构与算法]前k个高频元素(用堆优化) JavaScript
题目:前k个高频元素给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]提示:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。你可以按任意顺序原创 2020-10-05 22:19:36 · 303 阅读 · 0 评论 -
[数据结构与算法]数组中的第k个最大元素(堆)
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/kth-largest-element-i原创 2020-10-05 22:02:27 · 233 阅读 · 0 评论 -
[数据结构]用JavaScript实现一个堆类
前言:在js中是没有堆这个数据结构的,但我们可以用类和Array模拟一个堆实现步骤:· 在类里,声明一个数组,用来装元素。· 主要方法:插入、删除堆顶、获取堆顶、获取堆大小。CODE:(以最小堆为例) class MinHeap { constructor() { this.heap = [] } swap(i1, i2) { [this.heap[i1], this.heap[i2]] = [this.heap[i2],原创 2020-10-05 21:29:39 · 456 阅读 · 0 评论 -
[数据结构与算法]剑指 Offer 34. 二叉树中和为某一值的路径
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[[5,4,11,2],[5,8,4,5]]/** * Definition for a bi原创 2020-10-04 19:46:29 · 120 阅读 · 0 评论 -
[算法][JavaScript] 无重复字符的最长子串
function fn(s) { let l = 0 let res = 0 let resL = 0 let resR = 0 const map = new Map() for (let r = 0; r < s.length; r++) { if (map.has(s[r]) && map....原创 2020-10-02 22:37:20 · 93 阅读 · 0 评论 -
[JavaScript]给一个元素Element,找出这个元素的全部Input子元素
<body> <div id="div1"> <ul> <input type="text"> <li></li> <li> <input type="text"></li> <li></li> </ul> </div原创 2020-10-02 20:07:39 · 1340 阅读 · 0 评论 -
[JavaScript]如何将www.xxx.com变为com.xxx.www
一、正则: let str = 'www.aabbcc.com' console.log(str.replace(/(www)\.(\w+)\.(com)/, (m,x,y,z)=>{ return z+'.'+y+'.'+x })); // 也可以console.log(str.replace(/(www)\.(\w+)\.(com)/, `$3.$2.$1`))二、数组api let str原创 2020-10-02 19:54:42 · 71679 阅读 · 0 评论 -
[JavaScript]利用reduce手写一个flat函数,数组扁平化
var arr1 = [1, 2, 3, [1, 2, 3, 4, [2, 3, 4]]] function flatDeep(arr, d = 1) { return d > 0 ? arr.reduce( (acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val, d - 1) : val), [] ) : ...原创 2020-09-29 23:43:19 · 690 阅读 · 0 评论 -
[JavaScript]利用正则两行代码完全搞定hex转rgb
let str = "#1929fd" /* 如果匹配到是#12f这种简写的,则将其转化为#1122ff */ str = str.replace(/^#([a-f\d])([a-f\d])([a-f\d])$/i, (m, r, g, b) => '#'+r + r + g + g + b + b); str = str.replace(/^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})/i, (m, r, g, b) ...原创 2020-09-29 23:09:50 · 279 阅读 · 0 评论 -
[JavaScript][ES6]关于Promise的面试题
https://juejin.im/post/6844904077537574919转载 2020-09-27 23:39:26 · 371 阅读 · 0 评论 -
[JavaScript]根据PromiseA+规范手写Promise
一、Promise的声明首先呢,Promise肯定是一个类,我们就用class来声明。• 由于 new Promise((resolve, reject)=>{}) ,所以传入一个参数(函数),PromiseA+里叫他executor(作业执行器),传入就执行。•executor里面有两个参数,一个叫resolve(成功),一个叫reject(失败)。•由于resolve和reject可执行,所以都是函数,我们用let声明。 class Promise {转载 2020-09-27 21:44:44 · 235 阅读 · 0 评论 -
[JavaScript]new操作符做了什么?如何实现一个 new?
做了什么?1、创建了一个空的js对象(即{})2、将空对象的原型prototype指向构造函数的原型3、将空对象作为构造函数的上下文(改变this指向)4、对构造函数有返回值的判断怎么实现?function _new(Con,...args){ //1、创建一个空的对象 let obj = {} // let obj = Object.create({}) //2、将空对象的原型prototype指向构造函数的原型 obj.__proto__ = Con.prot原创 2020-09-26 18:32:07 · 427 阅读 · 0 评论 -
[JavaScript]关于事件绑定和大循环的一些测试结论
一、大循环里有抛出错误 let a = 0 let b = 0 while(a<50000){ if(a === 30000){ throw Error } console.log("aaaaaaaaa") a++ } ok.onclick=()=>{ console.log原创 2020-09-26 17:36:55 · 102 阅读 · 0 评论 -
[JavaScript]深入理解arguments,aplly,call,bind,手写bind
此文为进阶理解,如果不熟悉标题中的arguments,aplly,call,bind,先去看他们的作用与基本用法一、函数属性&arguments function foo(x,y,z){ arguments.length // 2 (只传入了两个参数) // 注意,arguments是类数组对象,是没有join,slice这些数组对象的方法的 arguments[0] // 1原创 2020-09-25 23:32:11 · 200 阅读 · 0 评论 -
[JavaScript]多行字符串转二维数组
const str = ` 1 21 3 4 5 6 7 8 9 `; /* 多行字符串要用反引号 */ var arr = str.split('\n'); /* 根据换行符分割 */ var res = new Array(); arr.forEach(function (item) { /* * 第一个replace是替换掉开头和最后的空格(\s包括空格和换行符),*表示0...原创 2020-09-20 17:30:56 · 1336 阅读 · 0 评论 -
[JavaScript]块级作用域中变量声明的一个机制测试
var a =10 { a = 20 } console.log(a) // 20 { a = 30 function a (){} a = 40 } console.log(a) // 30 { a = 50 function a (){...原创 2020-09-20 11:37:56 · 111 阅读 · 0 评论 -
[JavaScript][] == ! [] 的结果为什么会是true
①、根据运算符优先级 ,! 的优先级是大于 == 的,所以先会执行 ![]!可将变量转换成boolean类型,null、undefined、NaN以及空字符串(’’)取反都为true,其余都为false。所以 ! [] 运算后的结果就是 false也就是 [] == ! [] 相当于 [] == false②、根据上面提到的规则(如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false转换为0,而true转换为1),则需要把 false 转成 0也就是 [] == ! [] 相当原创 2020-09-19 16:43:07 · 523 阅读 · 0 评论 -
[JavaScript]写一个鼠标拖拽元素事件
<style> div { width: 300px; height: 200px; background-color: pink; position: fixed; /* absolute也可以,目的是使其脱离文档流 */ top: 0; left: 0; }</style>理解e.clientX,e.clientY e.pageX e.pageY e.offset原创 2020-09-17 22:50:48 · 441 阅读 · 0 评论 -
[JavaScript] 理解 e.clientX,e.clientY e.pageX e.pageY e.offsetX e.offsetY
event.clientX、event.clientY鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条。IE事件和标准事件都定义了这2个属性event.pageX、event.pageY类似于event.clientX、event.clientY,但它们使用的是文档坐标而非窗口坐标。这2个属性不是标准属性,但得到了广泛支持。IE事件中没有这2个属性。event.offsetX、event.offsetY鼠标相对于事件源元素(srcElement)的X,Y坐标,只有转载 2020-09-17 22:46:35 · 2708 阅读 · 0 评论 -
[JavaScript]引用JavaScript文件时的两个属性defer和async
https://www.cnblogs.com/zhaiqianfeng/archive/2012/07/30/4616944.html转载 2020-09-17 14:51:33 · 141 阅读 · 0 评论 -
[JavaScript]根据属性进行排序
function compare(property, sort) { return function (a, b) { // sort =1 是正序,sort = -1 是倒序 var value1 = a[property]; var value2 = b[property]; if (sort == 1) { ...原创 2020-09-16 21:29:17 · 110 阅读 · 0 评论 -
[JavaScript]Canvas和SVG的比较
Canvas 与 SVG 的比较下面列出了 canvas 与 SVG 之间的一些不同之处。Canvas依赖分辨率不支持事件处理器弱的文本渲染能力能够以 .png 或 .jpg 格式保存结果图像最适合图像密集型的游戏,其中的许多对象会被频繁重绘Canvas 是逐像素进行渲染的。在 canvas 中,一旦图形被绘制完成,它就不会继续得到浏览器的关注。如果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对象。SVG不依赖分辨率支持事件处理器最适合带有大型渲染区域的应原创 2020-09-13 21:16:52 · 594 阅读 · 0 评论 -
[JavaScript]手写一个instanceof
function instance_of (L, R) { const baseType = ['undefined','string','number','symbol','boolean'] if( baseType.includes(typeof(L)) || baseType.includes(typeof(R)) || L === null || R ==原创 2020-09-13 17:43:11 · 375 阅读 · 0 评论 -
[数据结构与算法]排序算法汇总(JavaScript版)
JavaScript所有排序算法汇总一、冒泡排序 Array.prototype.bubbleSort = function () { for (let i = 0; i < this.length - 1; i++) { for (let j = 0; j < this.length - 1 - i; j++) { if (this[j] > this[j + 1]) {原创 2020-09-13 09:54:31 · 267 阅读 · 0 评论 -
[数据结构与算法]链表反转
/** * @param {ListNode} head * @return {ListNode} */var reverseList = function(head) { let p1 = head let p2 =null while (p1){ const tmp = p1.next p1.next = p2 p2 = p1 p1 = tmp }};原创 2020-09-13 08:35:51 · 94 阅读 · 0 评论 -
[数据结构与算法]两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807var addTwoNumbers = function(l1, l2原创 2020-09-13 08:35:16 · 248 阅读 · 0 评论 -
[JavaScript]输出所点击的li标签的index并且给其一个红色的背景 (事件代理)
let ul = document.getElementsByTagName("ul")[0] let lis = document.getElementsByTagName("li") ul.onclick = function (e) { var e = window.event || e var target = e.target || e.srcElement if (target...原创 2020-09-12 17:43:57 · 195 阅读 · 0 评论 -
[JavaScript]求一个数组的最大值有哪些方法
var arr = [1,3,4,2]1.Math.max()var arr = [1,3,4,2]console.log(Math.max(...arr))var arr = [1,3,4,2]console.log(Math.max.apply(null,arr))2.sort()后最后一个元素var arr = [1,3,4,2]console.log(arr.sort()[arr.length-1])3.reduce()var arr = [1,3,4,2]var ma原创 2020-09-12 17:24:43 · 376 阅读 · 0 评论 -
[JavaScript]实现一个函数,以字符串形式(要求字母小写)返回参数类型
function getArgType(arg){ return Object.prototype.toString.apply(arg).slice(8,-1).toLowerCase()}console.log(getArgType(null))console.log(getArgType(undefined))const a = 1const b = new Number(1)console.log(a === b)console.log(getArgType(a))conso原创 2020-09-12 17:07:33 · 884 阅读 · 0 评论 -
[JavaScript]字符串方法汇总
1、toLowerCase(): 把字符串转为小写,返回新的字符串。var str=“Hello World”;var str1=str.toLowerCase();console.log(str1); //hello world2、toUpperCase(): 把字符串转为大写,返回新的字符串。var str=“hello world”;var str1=str.toUpperCase();console.log(str1); //HELLO WORLD3、charAt(): 返回指定下标原创 2020-09-12 16:27:34 · 192 阅读 · 0 评论 -
[JavaScript]用正则的方式实现千位分隔符
reg=/\d{1,3}(?=(\d{3})+$)/g // 表示前面有1~3个数字,后面的至少由一组3个数字结尾 let num =12345678 let result = (num+'').replace(reg, '$&,'); console.log(result)原创 2020-09-10 20:47:05 · 821 阅读 · 0 评论 -
[ES6]ES6中export default 与 export 的差别在哪里
export default 和 export 的主要区别 在于对应的import的区别:export 对应的 import 需要知道 export抛出的变量名或函数名(实际上也是运用了ES6解构赋值) import {a,b}export default对应的 import 不需要知道 export抛出的变量名或函数名 import anyname...原创 2020-09-10 16:59:00 · 125 阅读 · 0 评论 -
[JavaScript]判断一个对象是空对象的方法
https://blog.youkuaiyun.com/weixin_41910848/article/details/81431644转载 2020-09-08 20:33:15 · 196 阅读 · 0 评论 -
[JavaScript]请把俩个数组 [A1, A2, B1, B2, C1, C2, D1, D2] 和 [A, B, C, D],合并为...
请把俩个数组 [A1, A2, B1, B2, C1, C2, D1, D2] 和 [A, B, C, D],合并为 [A1, A2, A, B1, B2, B, C1, C2, C, D1, D2, D]。这题有很多种解法,下面是我最喜欢的一种: let arr1 = ["A1", "A2", "B1", "B2", "C1", "C2", "D1", "D2"]; let arr2 = ["A", "B", "C", "D"]; console.log(原创 2020-08-25 15:41:33 · 836 阅读 · 0 评论