要什么标题-文档

152 阅读15分钟
    1. encrypt
    1. react组件传值
    1. 3 type 区分 弹出框 --
  1. 4 泰罗组件 -
  2. 5 组件布局 -
  3. 6 树桩数据展示 获取
  4. 7 路由传参 接受-
    1. sync方法 相当于 自定义属性 与 自定义事件的结合体 简化了代码
    1. 5 深拷贝,浅拷贝
  5. -- 浅拷贝只拷贝最外层,更里面的数组或对象 无法拷贝
  6. for循环一次 赋值 只拷贝最外层
  7. 1通过Object.assign()拷贝 只能拷贝最外层,多层失效(一层对象时可直接使用)
  8. 2对拷贝对象结构赋值 给 另一个空对象,

  9. 基础数据类型赋值
  10. 复杂数据类型 赋指向
  11. -- 深拷贝 每一层都拷贝,数组,对象的值也会拷贝
  12. 1深拷贝通过递归 循环 先拿到对象每一项的值 再 值判断是否为数组,是继续递归,再判断是都为对象,继续递归,都不是 直接赋值
  13. 2通过 转换josn 先把对象转成JSON.stringify() josn字符串 ,再转化成 对象 JSON.parse() ----注意: 无法实现对象中方法的深拷贝
  14. 浅拷贝,只拷贝最外层的对象。更深层对象无法拷贝
  15. 9 参数--
  16. 10 遍历:
  17. includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
  18. 1 for 循环 原生for循环法,最常用,使用简单,性能强悍, 顺序严格.(只能遍历数组)
  19. 2 forEach 循环 此方法为数组自带方法, 使用方便, 性能稍弱, 遍历出来可能不能保留数组中的顺序. (不影响原数组 ,只有基本数据类型时不改变,引用数据类型改变)(只能遍历数组)
  20. 3 for in 循环 性能低下. 遍历出的数组下标是字符串型, 涉及计算需要转为数字型; 遍历时, key会越界, 会出错 (主要遍历--对象--)
  21. 4 map 循环,方法返回一个新数组, 需要返回值 数组中的元素为原始数组元素调用函数处理后的值 --)(不影响原数组) (只能遍历数组)
  22. 5 for of 循环 与forEach()不同的是,它可以正确响应break、continue和return语句 (只能遍历数组)
  23. 6 some 循环 有一项为 true 则返回true (只能遍历数组)
  24. 7 every 方法用于检测数组所有元素是否都符合指定条件 都符合则返回 true (只能遍历数组)
  25. 8 filter 返回结果为true的成员组成一个新数组返回。该方法不会改变原数组。要return返回 (只能遍历数组)
  26. 9 while While语句包括一个循环条件和一段代码块,只要条件为真,就不断循环执行代码块。
  27. 10 reduce(),reduceRight()方法可依次处理数组的每个成员 reduce方法和reduceRight方法依次处理数组的每个成员,最终累计为一个值。它们的差别是,reduce是从左到右处理(从第一个成员到最后一个成员),reduceRight则是从右到左(从最后一个成员到第一个成员),其他完全一样。
  28. 11 Object,keys遍历对象的属性 返回可枚举的属性。 ( 主要遍历--对象--)
  29. 12 Object.getOwnPropertyNames()遍历对象的属性 它能返回不可枚举的属性 (主要遍历--对象--)
  30. 13 find()成功返回true 失败 false 如果没有通过测试的元素,则会返回undefined。 只返回第一个满足条件的元素
  31. 14 findIndex()找到 函数, 返回索引 只返回第一个满足条件的元素的索引
  32. 15 includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。(有返回 true,没有false)。
  33. 16 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。没有返回 -1
  34. Object的hasOwnProperty()方法返回一个布尔值,判断对象是否包含特定的自身(非继承)属性。 hasOwnProperty()
  35. this.$nextTick()将回调延迟到下次 DOM 更新循环之后执行
  36. 相同处:map(),foreach,filter循环的共同之处 循环中途是无法停止的,总是会将所有成员遍历完 都可以接受第二参数
  37. 不同处: forEach循环没有返回值;map,filter循环有返回值。
  38. some 满足条件则返回
  39. ------------在ES6之前,js只存在函数作用域以及全局作用域
  40. 1:var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。
  41. 2:let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
  42. 3:const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。 常量的含义是指向的对象不能修改,但是可以改变对象内部的属性值
  43. 4:同一个变量只能使用一种方式声明,不然会报错
  44. beforeRouteLeave
  45. toString
  46. num1.toString().split('.')[1].length;
  47. 10.5
  48. indexOf 检测一个数组中 出现的元素位置,没有 返回-1
  49. 12
  50. react taro中 引入组件 及传值
  51. 饿了么组件样式布局
  52. 级联选择 必选
  53. console.log(this.$refs.comAddrRef.getCheckedNodes()[0].pathLabels
  54. 获取级联选择地址数组
  55. encodeURI()编码的解码函数为 decodeURI()
  56. 正则
  57. /i 忽略大小写的功能,是不能单独使用的。
  58. /g 在全文中查找所出现的指定字符串。
  59. /ig 忽略大小写在全文中查找指定字符串。
  60. /gi /gi和/ig作用是一样的,都是忽略大小写在全文中查找指定字符串。
  61. /m 多行查找
  62. const availAmount = Number(this.state.repayAccount.availAmount.replace(/,/gi, ''))

  63. 11操作数组的办法,修改 不修改的 分类
  64. 13 数组 字符串之间转化 ,分割,替换,的方法
  65. 1、join()
  66. 定义:将数组中所有的元素都转化为字符串拼接在一起,返回最后生成的字符串。
  67. 注意: 不改变原数组
  68. 2、reverse()
  69. 定义:将数组中的元素颠倒顺序,返回逆序的字符串。
  70. 注意: (原数组被改变)
  71. 3、sort()
  72. 定义:将数组中的元素排序后返回排序后的数组、
  73. 注意:数组以字母表顺序排。
  74.      (原数组被改变)
    
  75. 4、concat()--
  76. 定义:创建并返回一个新数组。新数组由原数组和concat()里面的参数组成
  77. 注意:(不改变原数组)
  78. 只能扁平化一维数组,高维不行(不会递归扁平化数组),高维数组(扁平化)降维可以看。扁平化多维数组。
  79. 通过递归
  80. [1, 2, 3, [ 4 , 5 , [ 6 ] ] ].flat( Infinity ) 可指定深度,默认深度为1,传Infinity表示彻底扁平化 (最强,最简单)
  81. 5、slice()
  82. 定义:返回指定数组的片段或者子数组,两个参数分别指是片段的开始和结束位置(不包含结束的位置)。
  83. 注意:(不改变原数组)
  84. 如果没有参数,相当于生成一原数组的副本
  85. 生成的新数组不包含结束位置的元素
  86. 6、splice()
  87. 定义:在数组中输入和删除元素的通用方法。返回的是由删除元素组成的新数组,没有删就返回空数组[]
  88. 前两个参数是指定需要删除的元素,后面的任意个数的参数是需要插入到原数组的元素
  89. 注意:(原数组被改变)
  90. 7、push()和pop()
  91. 定义:push在数组的末尾添加一个或者多个元素,返回新数组的长度。所以不能链式操作
  92. pop删除数组的最后一个元素,返回它删除的值元素
  93. 注意:(原数组被改变)
  94. 8、unshift()和shift( ) shift-移除
  95. 定义:un shift是在数组头部添加一个或多个元素。如果一次性传入多个参数,多个参数按照按照原先的位置直接加到数
  96. 组中。返回新数组的新数组的长度。
  97. shift:删除数组的第一个元素,并返回删除的元素
  98. 注意:(原数组被改变)
  99. 9、toString()
  100. 定义:将数组数组中的每个元素转化为字符串。 输出用逗号分隔的字符串列表(可能数组的内部元素(数组)还会再次调
  101. 用toString(),高维数组扁平化正是利用这点)
  102. 注意:与不使用任何参数调用的jion()方法返回的字符串一样。
  103. (不改变原数组)
  104. 10 split( )--将字符串分割成数组,(',')以逗号分割字符串 ------------------------------ split()
  105. ( 方法不改变原始字符串 )。
  106. 11 substring() 方法用于提取字符串中介于两个指定下标之间的字符。 (不修改原字符串!)

  107. 修改数组 字符串的方法,影响原值的 进行分类
  108. 1.常规方式 递归处理
  109. 5.扩展运算符
  110. console.log([].concat(...arr));
  111. es6中的flat函数也可以实现数组的扁平化
  112. let arr1 = [1,2,['a','b',['中','文',[1,2,3,[11,21,31]]]],3];
  113. console.log( arr1.flat( Infinity ) ); 好用简单
  114. 脱敏:
  115. 身份证:
  116. 18位
  117.   const reg = /^(\d{6})\d{8}(\d{4})$/
    
  118.   const tel = mobile.replace(reg, '$1********$2')
    
  119. 手机号:
  120. 11位
  121. const reg = /^(\d{3})\d{4}(\d{4})$/;
    
  122. const tel = mobile.replace(reg, "$1****$2");
    
  123. 获得当前时间戳的 3种方法
  124. 1 var timestamp = Date.parse(new Date());
  125. 2 var timestamp = (new Date()).valueOf();
  126. 3 var timestamp= new Date().getTime();
  127. 第一种:获取的时间戳是把毫秒改成000显示,
  128. 第二种和第三种是获取了当前毫秒的时间戳。
  129. VUEX
  130. this.store.dispatch():含有异步操作,例如向后台提交数据,写法:this.store.dispatch() :含有异步操作,例如向后台提交数据,写法:this.store.dispatch(‘action方法名’,值)
  131. this.store.commit():同步操作,,写法:this.store.commit():同步操作,,写法:this.store.commit(‘mutations方法名’,值)
  132. commit: 同步操作
  133. 存储 this.$store.commit('changeValue',name)
  134. 取值 this.$store.state.changeValue
  135. dispatch: 异步操作
  136. 存储 this.$store.dispatch('getlists',name)
  137. 取值 this.$store.getters.getlists
  138. ————————————————
  139. 一、this.$router.push
  140. 说明:跳转到指定URL,向history栈添加一个新的记录,点击后退会返回至上一个页面
  141. this.$router.go(n)
  142. 二、this.$router.replace
  143. 说明:跳转到指定URL,替换history栈中最后一个记录,点击后退会返回至上上一个页面
  144. 说明:类似window.history.go(n),向前或向后跳转n个页面,n可正(先后跳转)可负(向前跳转)
  145. location.reload() // 为了重新实例化vue-router对象 避免bug
  146. style="width: 100%"
  147. min-width="160" ---- align="center"

  148. 熟悉 后管里 资金方 页面
  149. 作废 追踪
  150. 项目管理
  151. // 取一个数组中第一项中 对象里面的值 ['名字'] = a.name
  152.       console.log(res.data.contacts[0]['contactPhone'])
    
  153.       console.log(res.data.contacts[0].contactPhone)
    
  154. 后管作废
  155. rsa加密
  156. 后管业务受理 - 业务申请-- 房抵-安售宝 页面
  157. 监听数据 发起请求
  158. 对象的 get( ) set( )
  159. 获取 设置
  160. new Set 数据类型 相当于对象 不重复
  161.     // clear
    
  162.     // 从映射中移除所有元素。
    
  163.     // delete  属性
    
  164.     // 从映射中移除指定的元素。
    
  165.     // forEach
    
  166.     // 对映射中的每个元素执行指定操作。
    
  167.     // get 属性
    
  168.     // 返回映射中的指定元素。
    
  169.     // has 属性
    
  170.     // 如果映射包含指定元素, 则返回 true。
    
  171.     // set 
    
  172.     // 添加一个新建元素到映射。
    
  173.     // toString
    
  174.     // 返回映射的字符串表示形式。
    
  175.     // valueOf
    
  176.     // 返回指定对象的原始值。
    
  177. 默认勾选项:
  178. 1得到详情数据里面 勾选标识,存数组 this.assOrderIdList = rsp.data.assOrderId ----assOrderId(返回判断标识)
  179. 2拿到本身表格ref 对象上数据
  180. 3在this.$nextTick中遍历 两个数据的相同项 勾选
  181. if ((rsp.code = '0000')) {
  182.       // 默认勾选
    
  183.       this.tableDataOrder = rsp.data.pageData---- 表格本身的数据
    
  184.       const listData = [...this.assOrderIdList] ----- 之前存的数据
    
  185.       this.$nextTick(() => {
    
  186.         listData.forEach((i) => {
    
  187.           .tableDataOrder.forEach((item) => {
    
  188.             if (i == item.orderId) {
    
  189.               this.$refs.multipleTable.toggleRowSelection(item, true)
    
  190.             }
    
  191.           })
    
  192.         })
    
  193.       })
    
  194.     }
    
  195. 地址选择 -- 传数据 ---回显
  196. 钉钉----------------------------------------------------
  197. 属性用引号包裹 因为要点一次数据
  198. 组件引入在 JSON文件中
  199. 组件 传参
  200. 在组件内 接受--------------通过 this.props.params
  201. FormData的主要用途有两个:、
  202. 1.将form表单元素的name与value进行组合,实现表单数据的序列化,从而减少表单元素的拼接,提高工作效率
  203. 2、异步上传文件。
  204. var formData = new FormData()
  205. formData.append( 'key', value ) //添加 2、通过append(key,value)在数据末尾追加数据
  206. 1、通过get(key)与getAll(key)来获取相对应的值 通过has(key)来判断是否存在对应的key值
  207. set(key, value)来设置修改数据,如果指定的key不存在则会新增一条,如果存在,则会修改对应的value值
  208. formData.has("k1"); // true
  209. formData.delete("k1"); //delete(key)删除数据
  210. Generator函数
  211. flex 布局
  212. // 阻止默认事件
    
  213. 用 console.log(e.cancelable) 可以检测是否有默认事件返回 true
  214. e.preventDefault();
    
  215. //阻止冒泡
  216. e.stopPropagation();
  217. 路径 绝对路径

  218. 从输入URL到页面加载发生了什么:::
  219. 总体来说分为以下几个过程:
  220. 1.DNS解析
  221. 2.TCP连接 3次握手,客户端发送状态,服务端接受状态, 服务端发起状态,客户端接受 开始传输
  222. 3.发送HTTP请求
  223. 4.服务器处理请求并返回HTTP报文
  224. 5.浏览器解析渲染页面
  225. 6.连接结束

  226. v-for的优先级是高于v-if的,如果两者同时出现的话 造成性能浪费 可以在外层新增一个模板标签template,在template上使用v-if
  227. switch 判断
  228. Reflect 是一个内置的对象,它提供拦截 JavaScript 操作的方法。这些方法与proxy handlers的方法相同。Reflect不是一个函数对象,因此它是不可构造的。
  229. 微前端
  230. 1 样式隔离
  231. 2 .JS 隔离
    1. 渲染 编译时模块级样式prefix 隔离 动态样式挂载和清理 分布式开发 更好的扩展性 交付速度 高效组件服用
  232. 使用 axios 拦截器解决「 前端并发冲突 」 问题
  233. 1每次发请求添加 loading
  234. 2调用 cancel token API 可以取消请求。 axios interceptors API 拦截请求,检测是否有多个相同的请求同时处于 pending 状态,如果有就调用 cancel token API 取消重复的请求
  235. 为什么 VUE中 data是一个函数 而不是一个对象 :
  236. 而当组件中的data是一个函数时,通过return,每次都返回一份对象的独立拷贝,当组件进行复用时,也就不会相互影响了,这也是我们想要达到的效果
  237. 所以组件的数据不能写成对象的形式,而是要写成函数的形式。数据以函数返回值的形式定义,这样当我们每次复用组件的时候,就会返回一个新的data
  238. 这个时候如果我们将data封装成一个函数,我们在实例化组件的时候只是调用了这个函数生成的数据副本,这就避免了数据污染。
  239. VUEX
  240. //  VUEX  1 state 2mutations 3actions 4 getters 5 modules
    
  241. // 1  sate  存
    
  242. // 2  mutations 改   this.$store.commit('saveCurrDbSource', this.cook)
    
  243. // 3  actions 异步修改    this.$store.dispatch('ACTIONS_CHANGE_BUFF', this.obj)
    
  244. // 4  getters 计算缓存     $store.getters.getOrders
    
  245. // 5  modules 模块管理
    
  246. // 6     import { mapState, mapGetters, mapMutations,mapActions } from 'vuex'
    
  247. // 7  ...mapGetters(['getOrders', 'good', 'getToken']), 在计算属性中
    
  248. //     ...mapState(['currDbSource', 'use', 'ff1']),  在计算属性中
    
  249. // 8  ...mapMutations(['saveCurrJobData']), 在methods 中映射
    
  250. // 9  ...mapActions(['saveCurrJobData']), 在methods 中映射
    
  251. 项目token设置
  252. HTTPS 12次TCP握手 需要一个证书,本质是公钥
  253. 在使用setState更新数据的时候,setState的更新类型分成:new Map
  254. 键 值 可以是任何形式
  255. var map = new Map([
  256.         ['a', 11111]
    
  257.     ]);
    
  258. console.log(map.get('a')) 等于1111
  259. new Map 结构 里面两个数组包裹
  260. 1 set 修改值
  261. 2 get 得到值
  262. 3 has 判断是否存在
  263. 4 delete 删除
  264. map.call(this) 调用
  265. 在组件生命周期或React合成事件中, setState是异步
  266. 在setTimeout或者原生dom事件中, setState是同步
  267. 如果是下一个state依赖前一个state的话,推荐给setState一个参数传入一个function,如下
  268. 分页后 选中某一条数据 翻页后 选中项还在---------------------------------------
  269.   //   实现 js中分页后 选中某一条数据 翻页后 选中项还在
    
  270.   // 1拿到所有选中的 orderId
    
  271.   // 2在整个数据里查找没 被选中的 项 
    
  272.   // 3 遍历选中数据与 后台返回选中项数据,选中中没有 后台 返回选中项  则 添加
    
  273.   // 4 遍历选着后没有选中数据与 后台返回选中项数据,查找有则删除
    
  274. handleAssOrderChange(val) {
    
  275.   选中
    
  276.   const selectedIds = new Set([...val.map(i => i.orderId)])
    
  277.   const curPageIds = this.tableDataOrder
    
  278.   没有选中的
    
  279.   const unSelectedIds = curPageIds.filter(i => !selectedIds.has(i.orderId))
    
  280.   val.forEach(i => {
    
  281.   返回的数据
    
  282.     const tempids = this.assOrdermultipleSelection.map(i => i.orderId)
    
  283.   遍历选中数据与 后台返回选中项数据,选中中没有 后台 返回选中项  则 添加
    
  284.     if (!tempids.includes(i.orderId)) {
    
  285.       this.assOrdermultipleSelection.push(i)
    
  286.     }
    
  287.   })
    
  288.  遍历选择完没有选中数据  与  后台返回选中项数据,    查找有则删除
    
  289.   unSelectedIds.forEach(i => {
    
  290.     const tempids = this.assOrdermultipleSelection.map(i => i.orderId)
    
  291.     const index = tempids.indexOf(i.orderId)
    
  292.     if (index > -1) {
    
  293.       this.assOrdermultipleSelection.splice(index, 1)
    
  294.     }
    
  295.   })
    
  296. },
    

  297. 在react 中 componentWillMount 中获取 传参后发起请求,如果数据发生改变 页面没有更新时 把请求放在 componentDidShow 周期内
  298. 在react 泰罗组件中遍历渲染
  299. key={String(number)}
  300. 1最外层给一个大盒子
  301. 2 大括号里 给判断 -- 接着 -- 小括号 里面在开始数据遍历

  302. 申请信息 -- 新增联系人-- 点击编辑
  303. async-validator ----------异步校验的库
  304. less
  305. 路由传参 ------ ? a='sss'带参数 & 分割参数
  306. taro 引入 静态文件
  307. import './css/path/name.scss'
  308. 引入JS 文件
  309. import { functionName } from './css/path/name.js'
  310. react 中 Hooks 使用
  311. 定时任务
  312. 后管 H5 位置选择
  313. 后管 水印-
  314. VUE自定义指令 -
  315. Vue.directive('my-directive', {
  316. bind: function () {},-------------
  317. inserted: function () {},
  318. update: function () {},------------
  319. componentUpdated: function () {},
  320. unbind: function () {}
  321. })
  322. VUE文档中---------
  323. 在JS文件中使用 VUEX 存的值
  324. import store from '../store/index'
  325. console.log(store.state.user.empName)
  326. 遍历对象除了 FOR IN 外
  327. Object.keys(a).forEach(i => {
  328.         console.log(i)
    
  329.     })
    
  330. document.getElementById('applyBasics').classList.remove('fixed')
  331. 中 classList 属性返回元素类名.
  332. element.classList.add(class1, class2, …); 为元素添加类:
  333. element.classList.contains(class); 查看元素是否存在类:
  334. 登录页面 短信
  335. 在 JS 中使用 let
  336. let不能在js中使用,是es6的语法,需要在js中使用就必须使用严格模式:'use strict';
  337. let 可以同时声明多个变量暂不赋值
  338. 一个HTTP请求
  339. 一个完整的请求都需要经过DNS寻址、与服务器建立连接、发送数据、等待服务器响应、接收数据
  340. 按需加载组件---在router中配置,使用这种方法可以实现按需加载,一个组件生成一个js文件
  341. {
  342. path: '/home',
  343. name: 'home',
  344. component:resove => require(['@/components/home'],resolve)
  345. }
  346. 使用动态的import()语法(推荐使用这种)
  347. const test1 = ()=>import('@/components/test1.vue')
  348. const test2 = ()=>import('@/components/test2.vue')
  349. //指定了相同的webpackChunkName,会合并打包成y一个js文件
  350. const test3 = ()=>import(/* webpackChunkName:'grounpTest' */ '@/components/test3.vue')
  351. const test4 = ()=>import(/* webpackChunkName:'grounpTest' */ '@/components/test4.vue')
  352. const router = new VueRouter({
  353. routes: [
    
  354.     { path: '/test1', component: test1 },
    
  355.     { path: '/test2', component: test2 },
    
  356.     { path: '/test3', component: test3 },
    
  357.     { path: '/test4', component: test4 }
    
  358. ]
    
  359. })
  360. 验证码
  361. 获取元素方式 事件
  362. getCurrentInstance 获取小程序的 app、page 对象、路由参数等数据
  363. import Taro, { getCurrentInstance } from '@tarojs/taro'
  364. $instance = getCurrentInstance()
  365. // 获取路由参数
  366. 传参时对特殊字符 编码解码 两种方式
  367. encodeURIComponent和decodeURIComponent可以编码和解码URI特殊字符(如#,/,¥等),而decodeURI则不能。
  368. 编码:encodeURI 解码:decodeURI
  369. var codeVal = encodeURI('20180711#abc');
  370. var url = 'www.xxx.com?code=' + codeVal;
  371. console.log(url);
  372. www.xxx.com?code=20180711#abc
  373. decodeURI("?code=20180711") //"?code=20180711"

  374. 编码:encodeURIComponent解码:decodeURIComponent
  375. var codeVal = encodeURIComponent('20180711#abc');
  376. var url = 'www.baidu.com?code=' + codeVal;
  377. url;
  378. "www.baidu.com?code=20180711%23abc"
  379. decodeURIComponent("?code=20180711%23abc") //"?code=20180711#abc"
  380. React Hooks------------------------------------------
  381. promise

  382.     getInfo() {
    
  383.         return new Promise((resolve, reject) => {
    
  384.             FromDataPost(url, data).then(rsp => {
    
  385.                 if (rsp.code === '000') {
    
  386.                     console.log(rsp)
    
  387.                     resolve()
    
  388.                 } else {
    
  389.                     reject()
    
  390.                 }
    
  391.             })
    
  392.         })
    
  393.     }
    

  394. 三元表达式对 类名的改变
  395. 在输入框中插入图标变色
  396. prefix:插入前面 suffix:插入后面

  397. 泰罗样式
  398. <AtButton formType='submit' className={this.state.password && this.state.passwordCfm ? 'sub-but' : 'dis-sub-but'}>确 认
  399. 路径 :
  400. ../ 当前目录 上一级
  401. 3个值为 --------------上 左右 下
  402. margin: 20px 40px 60px;(上20px;左、右40px;下60px。)
  403. 权重
  404. padding: 0 !important;
  405. 安居项目名称选择
  406. 分期 期数
  407. vertical-align 属性设置元素的垂直对齐方式。
  408. 泰罗总
  409. 十字加号图标
  410. //将数字转换成金额显示
  411. function fmoney(s, n) {
  412.         n = n > 0 && n <= 20 ? n : 2;
    
  413.         s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";
    
  414.         var l = s.split(".")[0].split("").reverse(),
    
  415.             r = s.split(".")[1];
    
  416.         t = "";
    
  417.         for (i = 0; i < l.length; i++) {
    
  418.             t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
    
  419.         }
    
  420.         return t.split("").reverse().join("") + "." + r;
    
  421.     }
    
  422.     let num = 526245111162158;
    
  423.     num = fmoney(num);
    
  424.     console.log(num); //打印结果    5,262,456.22
    

  425. 泰罗组件库中
  426. editable为是否可输入
  427. 遍历对象的几种方法
  428. background 属性
  429. background-size: cover;
  430. background-repeat: no-repeat;
  431. 引入变量
  432. import store from '../store/index'
  433. console.log(store.state.user.empName)
    
  434. import img1 from '../../../static/image/front.png'
  435. import img2 from '../../../static/image/back.png'
  436.   img1: img1,
    
  437.   img2: img2
    
  438. taro 版本升级
  439. (复制一个package.json 文件 npm i)
  440. 1 升级依赖 taro update project 3.2.5
  441. 2 npm install  @tarojs/cli@3.2.5
  442. 3 忽略 npm i 下载包
  443. 4 添加文件中 config的文件 修改路由参数接受
  444. 5 对比 config 文件夹中的文件
  445. react 组件传参
  446. -------禁止小数点数字
  447. Number(res.data.yearIncome.replace(/,/gi, '')).toFixed(0)
  448. toFixed能将数字装换成字符串?
  449. // var a = /^([1-9][0-9]*)$/.test(yearIncome)
    
  450. // var b = /^([1-9][0-9]*)$/.test(6000.232)
    
  451. // console.log('ssss')
    
  452. // console.log(yearIncome)
    
  453. // console.log(a)
    
  454. // console.log(b)
    
  455. // console.log('ssss')
    
  456. 去掉数字前面的0--
  457. Number.toFixed(x) 是将指定数字截取小数点后 x 位。 都有四舍五入的功能 计算小数点后的长度
  458. Number.toPrecision(x) 是将整个数字截取指定 x 长度。 都有四舍五入的功能 一个是计算整个数字的长度
  459. 1.parseFloat(Number),去除小数点后面多余的0,
  460. 1.丢弃小数部分,保留整数部分
  461. parseInt(5/2)
  462. 2.向上取整,有小数就整数部分加1
  463. Math.ceil(5/2)
  464. 3,四舍五入.
  465. Math.round(5/2)
  466. 4,向下取整
  467. Math.floor(5/2)
  468. 5.parseInt(),转化为整数
  469. 当你想要格式化小数点右边有固定位数的数字时,可以使用toFixed()方法。该方法返回的值是一个字符串,它在小数点后精确地指定了位数。如果没有指定或省略digit参数,则将其视为0。这里有一个例子:
  470. // 保留2位小数,不足补0
  471.     function formatFloat(x) {
    
  472.         var f = Number(x);
    
  473.         if (isNaN(f))
    
  474.             return false;
    
  475.         var f = Math.round(x * 100) / 100;
    
  476.         var s = f.toString();
    
  477.         var rs = s.indexOf('.');
    
  478.         if (rs < 0) {
    
  479.             rs = s.length;
    
  480.             s += '.';
    
  481.         }
    
  482.         while (s.length <= rs + 2) {
    
  483.             s += '0';
    
  484.         }
    
  485.         return s;
    
  486.     }
    
  487. 高度 滑动设置------
  488. 省市区 选择问题-----------
  489. 工具包里面的时间 封装 ------
  490. JavaScript中将字符串转为数组的方法
  491. 方法1:使用split()方法
  492. 方法2:使用Array.from()方法
  493. split 字符串转数组
  494. let a = '2021-08-24 11:53:22'
  495. let b = a.split(" ")[0] 先转换成数组 再取第一项值
  496. console.log(
    
  497.   b
    
  498. )
    
  499. 一空格 分割 取第一个
  500. 数组转字符串
  501. 1 toString()
  502. 2 join("=="); //指定分隔符
  503. pointer-events: none; 不让该元素接受鼠标点击事件
  504. width: auto;
  505. text-overflow: ellipsis; 溢出显示省略号
  506. white-space: nowrap; 规定段落中的文本不进行换行
  507. transform-origin: center; 以中心为原点 旋转
  508. flex-wrap: wrap; 规定灵活的项目在必要的时候拆行或拆列。
  509. caret-color: 说是光标
  510. var num = '00125';  转换成数字类型
    
  511. console.log(~~num); 可以去掉前面多余的0  按位取反    它被用作一个更快的替代 Math.floor() 。 
    
  512. switch 判断
  513. NodeJS,
  514. (1)cookie和localstoraeg的区别
  515. cookie 放进请求头中,随请求头每次提交,浪费带宽
  516. localstoraeg 不随请求头提交,可以长时间保存
  517. new Date().getDay()-------输出星期几
  518. hooks
  519. function App () {
  520. const [ count, setCount ] = useState(0)
  521. useEffect(() => {
  522. document.title = count
    
  523. })
  524. return (
  525. <div>
    
  526.   页面名称: { count } 
    
  527.   <button onClick={() => { setCount(count + 1 )}}>点我</button>
    
  528. </div>
    
  529. )
    
  530. }
  531. ————————————————
  532. 点击按钮 返回顶部
  533.      <button id="goTop">返回顶部按钮</button>
    
  534.     function backTop(btnId) {
    
  535.         var btn = document.getElementById(btnId);
    
  536.         var d = document.documentElement;
    
  537.         var b = document.body;
    
  538.         window.onscroll = set;
    
  539.         btn.style.display = "none";
    
  540.         btn.onclick = function() {
    
  541.             btn.style.display = "none";
    
  542.             window.onscroll = null;
    
  543.             this.timer = setInterval(function() {
    
  544.                 d.scrollTop -= Math.ceil((d.scrollTop + b.scrollTop) * 0.1);
    
  545.                 b.scrollTop -= Math.ceil((d.scrollTop + b.scrollTop) * 0.1);
    
  546.                 if (d.scrollTop + b.scrollTop == 0)
    
  547.                     clearInterval(btn.timer, (window.onscroll = set));
    
  548.             }, 10);
    
  549.         };
    
  550.         function set() {
    
  551.             btn.style.display = d.scrollTop + b.scrollTop > 100 ? "block" : "none";
    
  552.         }
    
  553.     }
    
  554.     backTop("goTop");
    

  555. 根据身份证判断年龄
  556. // GetAge(identityCard) {
  557. // let len = (identityCard + '').length
  558. // let strBirthday = ''
  559. // if (len == 18) {
  560. // // 1996 04 02
  561. // strBirthday = identityCard.substr(6, 4) + '/' + identityCard.substr(10, 2) + '/' + identityCard.substr(12, 2)
  562. // }
  563. // //时间字符串里,必须是“/”
  564. // let birthDate = new Date(strBirthday)
  565. // let nowDateTime = new Date()
  566. // // 当前年月-生日年月 = 年龄
  567. // let age = nowDateTime.getFullYear() - birthDate.getFullYear()
  568. // if (
  569. // nowDateTime.getMonth() < birthDate.getMonth() ||
  570. // (nowDateTime.getMonth() == birthDate.getMonth() && nowDateTime.getDate() < birthDate.getDate())
  571. // ) {
  572. // age--
  573. // }
  574. // this.setState({
  575. // commonCredNumberAge: age
  576. // })
  577. // return age
  578. // }
  579. JS中 reduce--用法----------------------
  580. style="max-width:270px"