本两周学习总结

这两周主要再看源码,所以没什么好写的,但是绝大大多源码或者记录一些我觉得有意思的代码,

主要记录的有D3源码,date-fns,rx.js主要是需要后期看能不能看看源码,numjs,然后修改成两周更新一次,其他这样的更新其实也是保持新鲜感

 this指向问题

function sumArgs() {
  return Array.prototype.reduce.call(arguments, (acc, val) => {
    return acc + val
  }, 0)
}

console.log(sumArgs(1, 2, 3))

263 丑数

编写一个程序判断给定的数是否为丑数。
丑数就是只包含质因数 2, 3, 5 的正整数。

思考

所以判断一个数是否为丑数只要将这个数不断与2,3,5相除,只要除的尽,并且最终结果为1,即为丑数。

const isUgly = num => {
  if (num < 1) {
    return false
  }
  while (num % 2 == 0) {
    num /= 2;
  }
  while (num % 3 == 0) {
    num /= 3;
  }
  while (num % 5 == 0) {
    num /= 5;
  }
  return num == 1;
}

removeEventListener的用法

                document.addEventListener('mousemove',removeMouse)
               document.removeEventListener('mousemove',removeMouse);
                function removeMouse(e){}

str.js

https://github.com/panzerdp/voca/blob/master/dist/voca.js#L1939

语音发声

  const speechSynthesis = message => {
                    const msg = new SpeechSynthesisUtterance(message);
                    msg.voice = window.speechSynthesis.getVoices()[0];
                    window.speechSynthesis.speak(msg);
                };
                speechSynthesis('我是谁,你能听到我说话吗')
需要点击触发,浏览器不支持自动触发

30s

https://github.com/30-seconds/30-seconds-of-code/blob/master/dist/_30s.js#L14202

arr-union

const unions = (first, ...arr) => {
    if (!Array.isArray(first)) {
        throw new TypeError('first argument 应该是数组')
    }
    let i = 0
    let len = arr.length
    while (i < len) {
        let item = arr[i]
        if (!item) {
            continue
        }
        if (!Array.isArray(item)) {
            item = [item]
        }
        for (let j = 0; j < item.length; j++) {
            if (first.includes(item[j])) {
                continue
            }
            first.push(item[j])
        }
        i++
    }
    return first
}
console.log(unions([], 1, 2, 3, 4, 5, [1, 2, 3]))
// [ 1, 2, 3, 4, 5 ]

isInteger

const _isInteger=n=>Number.isInteger(n)|| n<<0 === n

async.js

https://github.com/caolan/async/blob/master/dist/async.js

node 相关,什么时候把node看得看不多就看看

有趣的代码

const add = (a, b) => {
  return +a + +b;
}

Node.js

http://nodejs.cn/api/fs.html

unlink 删除文件

unlinkSync 同步删除 应该放在try catch里面

rename 重命名

stat fstat 文件属性

两个的方法功能是一样的都是获取文件的状态信息

fs.open('./test46.js','r',(err,fd)=>{
  if(err) throw err;
  fs.fstat(fd,(err,status)=>{
    if(err) throw err;
    //文件描述
    console.log(status)
    /*关闭文件空间*/
    fs.close(fd,(err)=>{
      if(err)throw err;
    })
  })
})

fs.stat('./test46.js',(err,res)=>{
  if(err) throw err;
  console.log(res)
})

fs.stat 接受的第一个参数是一个文件路径字符串
fs.fstat 接收的是一个文件描述符

API

https://juejin.im/post/5d6e5a2851882554841c3f3b

# Buffer类
原生没有,node引入Buffer类
Buffer.alloc(size[,fill[,encoding]])
//长度  值   编码方式 (默认utf8),长度必传
例如
//创建长度为5,填充12,默认utf8
console.log(Buffer.alloc(5,12))
<Buffer 0c 0c 0c 0c 0c>

# Buffer.from(array)
//接受一个*整数数组*,返回一个buffer对象
console.log(Buffer.from([1, 2, 3,13]))
<Buffer 01 02 03 0d>
//接受一个字符串
let a=Buffer.from('Hello World!')
// <Buffer 48 65 6c 6c 6f 20 57 6f 72 6c 64 21>
console.log(a.toString())
//Hello World!

# Buffer.isEncoding(encoding)
判断是否支持某种编码
Buffer.isEncoding('utf8') //true

# Buffer.isBuffer(obj)
判断是否为Buffer对象
console.log(Buffer.isBuffer(Buffer.alloc(3)))   // 输出true

# Buffer.byteLength(string)
console.log(Buffer.byteLength('我是ss')) //3+3+2
# 合并传入的buffer数组
let a=Buffer.alloc(1,2)
let b=Buffer.alloc(2,3)
console.log(Buffer.concat([a, b]))
//<Buffer 02 03 03>
# buf.write
const buf = Buffer.alloc(10);
//写入string,索引位置,长度
buf.write('heelo', 1, 4)
console.log(buf)
// <Buffer 00 68 65 65 6c 00 00 00 00 00>
console.log(buf.toString())
// heel
#buf.slice([start[,end]])
//包左不包右
const buf1 = Buffer.from('Hello world');
const buf2=buf1.slice(0,4);
console.log(buf2.toString());
// Hell

# buf.toString([encoding[,start[,end]]])
将二进制数据流转换成字符串,encoding是编码方式,start与end效果同slice
const buf1 = Buffer.from('Hello world');
console.log(buf1.toString('utf8', 0,4 ))
//Hell

path 操作路径对象

path.basename(path[,ext])
//获取文件名及文件后缀,ext是文件后缀
const path = require('path');
console.log(path.basename('/a/b/c/d/index.html')) //index.html
console.log(path.basename('/a/b/c/d/index.html', '.html'))//index

//获取不带文件名的文件路径
console.log(path.dirname('/a/b/c/d/index.html'))// /a/b/c/d
//获取文件名后缀
console.log(path.extname('/a/b/c/index.html')) // .html
//将路径字符串转换为路径对象
const pathObj = path.parse('E:\\a\\b\\c\\d\\index.html')
console.log(pathObj)
/* 输出
 * {
 *  root: 'E:\\', // 文件根目录
 *  dir: 'E:\\a\\b\\c\\d', // 不带文件名的文件路径
 *  base: 'index.html', // 文件名
 *  ext: '.html', // 文件后缀
 *  name: 'index' // 不带后缀的文件名
 * }
 */

// 将路径对象转换为路径字符串
const pathObj = {
  root: 'E:\\',
  dir: 'E:\\a\\b\\c\\d', //必传
  base: 'index.html',//必传
  ext: '.html',
  name: 'index'
}
console.log(path.format(pathObj))
// 输出 E:\a\b\c\d\index.html
// 注意:路径对象的每个属性不是必须的,提供了dir属性时会忽略root属性,提供了base属性时会忽略ext与name属性

//判断路径是否是绝对路径
console.log(path.isAbsolute('E:/a/b/c/d\index.html')) //true
console.log(path.isAbsolute('./a/b/c/d\index.html')) //false

 报错信息

TypeError 允许一个TypeError类型错误
URIError  URL错误
ReferenceError   一个不存在的变量
RangeError 当一个值不在其所允许的范围或者集合中。

数据结构

https://github.com/mgechev/javascript-algorithms

 算法

https://github.com/jeantimex/javascript-problems-and-solutions

优化滚动条样式

    *::-webkit-scrollbar {
        /*滚动条整体样式*/
        width: 8px;/*定义纵向滚动条宽度*/
        height: 8px;/*定义横向滚动条高度*/
    }

    *::-webkit-scrollbar-thumb {
        /*滚动条内部滑块*/
        border-radius: 8px;
        background-color: hsla(220, 4%, 58%, 0.3);
        transition: background-color 0.3s;
    }

    *::-webkit-scrollbar-thumb:hover {
        /*鼠标悬停滚动条内部滑块*/
        background: #bbb;
    }

    *::-webkit-scrollbar-track {
        /*滚动条内部轨道*/
        background: #ededed;
    }

改成less模式
* {
  &::-webkit-scrollbar {
    width: 8px;
    height: 8px;
  }

  &::-webkit-scrollbar-thumb {
    border-radius: 8px;
    background-color: hsla(220, 4%, 58%, 0.3);
    transition: background-color 0.3s;

    &:hover {
      background: #bbb;
    }
  }

  &::-webkit-scrollbar-track {
    background: #ededed;
  }
}

禁止选中

.aaa{
    user-select:none;
}

删选数组

var origin = [ 1 , 2 , 'a' , 3 , 1 , 'b' , 'a' ];
console.log(origin.filter((val, index) => origin.indexOf(val) === index))
//[ 1, 2, 'a', 3, 'b' ]

随机值

let a=(1 + Math.random()).toString(36);
console.log(a) // 1.cn52taii2g

有意思的代码

let slice = Function.call.bind(Array.prototype.slice);
let concat = Function.call.bind(Array.prototype.concat);
let forEach = Function.call.bind(Array.prototype.forEach);
let map = Function.call.bind(Array.prototype.map);
console.log(map([1, 2, 3, 4, 5], (val, index) => [val * 2, index]))
// [ [ 2, 0 ], [ 4, 1 ], [ 6, 2 ], [ 8, 3 ], [ 10, 4 ] ]

时间转化

var s = 1000;
var m = s * 60;
var h = m * 60;
var d = h * 24;
var w = d * 7;
var y = d * 365.25;
function fmtShort(ms) {
    var msAbs = Math.abs(ms);

    if (msAbs >= d) {
        return Math.round(ms / d) + 'd';
    }

    if (msAbs >= h) {
        return Math.round(ms / h) + 'h';
    }

    if (msAbs >= m) {
        return Math.round(ms / m) + 'm';
    }

    if (msAbs >= s) {
        return Math.round(ms / s) + 's';
    }

    return ms + 'ms';
}

你们知道为啥在源码看总是有xxx!=null

undefined==null  //true
null==null //true
//把其他类型转成数字类型
const number = (x) => x === null ? NaN : +x;

复制剪贴板

https://clipboardjs.com/

 物理引擎

https://github.com/schteppe/p2.js

获取当前时间

let str=new Date(+new Date() + 8 * 3600 * 1000).toISOString().split(/[T.]/g).slice(0,2)
let newDate=`${str[0]} ${str[1]}`
console.log(newDate)

原文地址:https://www.cnblogs.com/fangdongdemao/p/11614459.html

时间: 2024-10-12 14:30:31

本两周学习总结的相关文章

入职第三周——总结前两周学习内容

入职第二周,我系统性的学习了mui框架以及angularjs,并且自己简单的写了一个登录页面.在做这个登录界面的时候,我接触到了html5+,这是hbulider自己写的接口,针对android原生api,在用html5写的时候可以调用html5+的接口,这样就可以使用android原生api,比如相机.录音或者通讯录等等. 入职第三周,我想通过项目来完善自己的技术,因为只是看看文档太无聊了,要真正动手做在实践中学习和成长才是正确的编程方式.所以我打算开发一个app,经过指导老师的建议,我准备开

张季跃 201771010139《面向对象程序设计(java)》第三周学习总结(改)

张季跃 201771010139<面向对象程序设计(java)>第三周学习总结 第一部分:理论知识学习部分 3.6字符串 u(1)Java字符串是Unicode字符的序列,它是组织字符的基 本数据结构,用法类似于字符数组. u (2)有内置的字符串类型,而是在标准Java类库中提供了一 个Java预定义类String.在Java中,字符串被当作对象 来处理. u      (3)程序中需要用到的字符串可以分为两大类: –创建之后不会再做修改和变动的不可变字符串String类: –创建之后允许再

20182310 第七周学习总结

20182310 2019-2020-1 <数据结构与面向对象程序设计>第七周学习总结 教材学习内容总结 1.链表实现栈 data存放数据点 next下一节点 存储地址 数据域 单链表:只含一个指针域的链表 a-> 双向链表:<-a-> 地址不一定连续 要用链表实现栈,就要操作链表的两端.所以除了一个指向链表首元素的引用(称为head)之外,还需要跟踪另一个指向链表末元素的引用(称为tail),还需要一个整型变量count来跟踪队列中的元素数目. 2.尾插法 Student

最近找到了一个免费的python教程,两周学会了python开发【内附学习视频】

原文链接:https://blog.csdn.net/weixin_41052734/article/details/86528541 最近找到了一个免费的python教程,两周学会了python开发.推荐给大家,希望召集更多的朋友一起学习python. 最近开始整理python的资料,博主建立了一个qq群,希望给大家提供一个交流的同平台: 78486745 ,欢迎大家加入共同交流学习. 本套教程学习时间15天 第一阶段(1-8天) 该阶段我们正式进入Python这门语言的学习,首先通过了解Py

【日常学习】清明前后两周学练总结

要写关键路径,发现图论早已忘得一塌糊涂,悲哀之余,抓紧复习.翻高级本时又看见了前面的贪心,于是就又把贪心练了一下.写了几道比较老的题目,像是积木大赛.之后还突发奇想练了栈一类的.总之,这两周的练习相当凌乱.下面贴一下近期做过的几道题目吧. 表达式求值专项训练 codevs1750 加法表达式 (自带吐槽:直接用读入优化那样的getchar()读入 但是要注意读不了的时候返回值是-1 所以不能用"!" 另外最后一次读不下去要break直接加上) codevs2715 表达式运算 (自带吐

201405644 嵌入式程序设计第五周学习总结

嵌入式课程设计第五周学习总结 标准 I/O 编程 标准 I/O 提供流缓冲的目的是尽可能减少使用 read()和 write()等系统调用的数量.标准 I/O 提供了 3 种类型 的缓冲存储.全缓冲.行缓冲.不带缓冲. 打开文件 打开文件有三个标准函数,分别为:fopen().fdopen()和 freopen().其中 fopen()可以指定打开文件的路径和模式,fdopen()可以指定打开的文件描述符和模式,而 freopen() 除可指定打开的文件.模式外,还可指定特定的 I/O 流. f

20155208徐子涵 2016-2017-2 《Java程序设计》第6周学习总结

20155208徐子涵 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 10.1.1 1.Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象. 2.若要将数据从来源中取出,可以使用输入串流:若要将数据写入目的地,可以使用输出串流.在java中,输入串流代表对象为java.in.InputStream的实例:输出串流代表对象为java.io.Outputstream的实例. 3.read()方法每次尝试读取数据,并返回实际读入的,只要不是负一

20155336 2016-2017-2《JAVA程序设计》第一周学习总结

# 20155336  2016-2017-2<JAVA程序设计>第1周学习总结 ## 教材学习内容总结 开学的第一周,带着些许的欣喜和好奇,听完了老师的第一堂课.说心里话学习JAVA仿佛观看一部英文影视作品一样头疼, 因为总会有许许多多相似的名字让你记得晕头转向.JAVA也是一样,什么JVM啊JRE啊JDK啊 (/(ㄒoㄒ)/~~)  等等一系列 的英文缩写,让人心神意乱~~但总体上对JAVA有了一个初步的了解.通过课上老师的介绍以及课下对JAVA书第一章的浏览, 我简单的了解了JAVA艰辛

20145336张子扬 《信息安全系统设计基础》第7周学习总结

20145336张子扬 <信息安全系统设计基础>第1周学习总结 教材学习内容总结 学习目标: 了解常见的存储技术(RAM.ROM.磁盘.固态硬盘等) 理解局部性原理 理解缓存思想 理解局部性原理和缓存思想在存储层次结构中的应用 高速缓存的原理和应用 三种常见存储技术:RAM.ROM和磁盘 随机访问存储器RAM分为静态RAM(SRAM)和动态RAM(DRAM) SRAM 用来作为高速缓存储存器,SRAM将每个位存储在一个双稳态的存储器单元里,每个单元是用一个六晶体管电路来实现的.它可以无限制地保