-
- encrypt
-
- react组件传值
-
- 3 type 区分 弹出框 --
- 4 泰罗组件 -
- 5 组件布局 -
- 6 树桩数据展示 获取
- 7 路由传参 接受-
-
- sync方法 相当于 自定义属性 与 自定义事件的结合体 简化了代码
-
- 5 深拷贝,浅拷贝
- -- 浅拷贝只拷贝最外层,更里面的数组或对象 无法拷贝
- for循环一次 赋值 只拷贝最外层
- 1通过Object.assign()拷贝 只能拷贝最外层,多层失效(一层对象时可直接使用)
- 2对拷贝对象结构赋值 给 另一个空对象,
-
- 基础数据类型赋值
- 复杂数据类型 赋指向
- -- 深拷贝 每一层都拷贝,数组,对象的值也会拷贝
- 1深拷贝通过递归 循环 先拿到对象每一项的值 再 值判断是否为数组,是继续递归,再判断是都为对象,继续递归,都不是 直接赋值
- 2通过 转换josn 先把对象转成JSON.stringify() josn字符串 ,再转化成 对象 JSON.parse() ----注意: 无法实现对象中方法的深拷贝
- 浅拷贝,只拷贝最外层的对象。更深层对象无法拷贝
- 9 参数--
- 10 遍历:
- includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
- 1 for 循环 原生for循环法,最常用,使用简单,性能强悍, 顺序严格.(只能遍历数组)
- 2 forEach 循环 此方法为数组自带方法, 使用方便, 性能稍弱, 遍历出来可能不能保留数组中的顺序. (不影响原数组 ,只有基本数据类型时不改变,引用数据类型改变)(只能遍历数组)
- 3 for in 循环 性能低下. 遍历出的数组下标是字符串型, 涉及计算需要转为数字型; 遍历时, key会越界, 会出错 (主要遍历--对象--)
- 4 map 循环,方法返回一个新数组, 需要返回值 数组中的元素为原始数组元素调用函数处理后的值 --)(不影响原数组) (只能遍历数组)
- 5 for of 循环 与forEach()不同的是,它可以正确响应break、continue和return语句 (只能遍历数组)
- 6 some 循环 有一项为 true 则返回true (只能遍历数组)
- 7 every 方法用于检测数组所有元素是否都符合指定条件 都符合则返回 true (只能遍历数组)
- 8 filter 返回结果为true的成员组成一个新数组返回。该方法不会改变原数组。要return返回 (只能遍历数组)
- 9 while While语句包括一个循环条件和一段代码块,只要条件为真,就不断循环执行代码块。
- 10 reduce(),reduceRight()方法可依次处理数组的每个成员 reduce方法和reduceRight方法依次处理数组的每个成员,最终累计为一个值。它们的差别是,reduce是从左到右处理(从第一个成员到最后一个成员),reduceRight则是从右到左(从最后一个成员到第一个成员),其他完全一样。
- 11 Object,keys遍历对象的属性 返回可枚举的属性。 ( 主要遍历--对象--)
- 12 Object.getOwnPropertyNames()遍历对象的属性 它能返回不可枚举的属性 (主要遍历--对象--)
- 13 find()成功返回true 失败 false 如果没有通过测试的元素,则会返回undefined。 只返回第一个满足条件的元素
- 14 findIndex()找到 函数, 返回索引 只返回第一个满足条件的元素的索引
- 15 includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。(有返回 true,没有false)。
- 16 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。没有返回 -1
- Object的hasOwnProperty()方法返回一个布尔值,判断对象是否包含特定的自身(非继承)属性。 hasOwnProperty()
- this.$nextTick()将回调延迟到下次 DOM 更新循环之后执行
- 相同处:map(),foreach,filter循环的共同之处 循环中途是无法停止的,总是会将所有成员遍历完 都可以接受第二参数
- 不同处: forEach循环没有返回值;map,filter循环有返回值。
- some 满足条件则返回
- ------------在ES6之前,js只存在函数作用域以及全局作用域
- 1:var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。
- 2:let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
- 3:const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。 常量的含义是指向的对象不能修改,但是可以改变对象内部的属性值
- 4:同一个变量只能使用一种方式声明,不然会报错
- beforeRouteLeave
- toString
- num1.toString().split('.')[1].length;
- 10.5
- indexOf 检测一个数组中 出现的元素位置,没有 返回-1
- 12
- react taro中 引入组件 及传值
- 饿了么组件样式布局
- 级联选择 必选
- console.log(this.$refs.comAddrRef.getCheckedNodes()[0].pathLabels
- 获取级联选择地址数组
- encodeURI()编码的解码函数为 decodeURI()
- 正则
- /i 忽略大小写的功能,是不能单独使用的。
- /g 在全文中查找所出现的指定字符串。
- /ig 忽略大小写在全文中查找指定字符串。
- /gi /gi和/ig作用是一样的,都是忽略大小写在全文中查找指定字符串。
- /m 多行查找
- const availAmount = Number(this.state.repayAccount.availAmount.replace(/,/gi, ''))
-
- 11操作数组的办法,修改 不修改的 分类
- 13 数组 字符串之间转化 ,分割,替换,的方法
- 1、join()
- 定义:将数组中所有的元素都转化为字符串拼接在一起,返回最后生成的字符串。
- 注意: 不改变原数组
- 2、reverse()
- 定义:将数组中的元素颠倒顺序,返回逆序的字符串。
- 注意: (原数组被改变)
- 3、sort()
- 定义:将数组中的元素排序后返回排序后的数组、
- 注意:数组以字母表顺序排。
-
(原数组被改变)
- 4、concat()--
- 定义:创建并返回一个新数组。新数组由原数组和concat()里面的参数组成
- 注意:(不改变原数组)
- 只能扁平化一维数组,高维不行(不会递归扁平化数组),高维数组(扁平化)降维可以看。扁平化多维数组。
- 通过递归
- [1, 2, 3, [ 4 , 5 , [ 6 ] ] ].flat( Infinity ) 可指定深度,默认深度为1,传Infinity表示彻底扁平化 (最强,最简单)
- 5、slice()
- 定义:返回指定数组的片段或者子数组,两个参数分别指是片段的开始和结束位置(不包含结束的位置)。
- 注意:(不改变原数组)
- 如果没有参数,相当于生成一原数组的副本
- 生成的新数组不包含结束位置的元素
- 6、splice()
- 定义:在数组中输入和删除元素的通用方法。返回的是由删除元素组成的新数组,没有删就返回空数组[]
- 前两个参数是指定需要删除的元素,后面的任意个数的参数是需要插入到原数组的元素
- 注意:(原数组被改变)
- 7、push()和pop()
- 定义:push在数组的末尾添加一个或者多个元素,返回新数组的长度。所以不能链式操作
- pop删除数组的最后一个元素,返回它删除的值元素
- 注意:(原数组被改变)
- 8、unshift()和shift( ) shift-移除
- 定义:un shift是在数组头部添加一个或多个元素。如果一次性传入多个参数,多个参数按照按照原先的位置直接加到数
- 组中。返回新数组的新数组的长度。
- shift:删除数组的第一个元素,并返回删除的元素
- 注意:(原数组被改变)
- 9、toString()
- 定义:将数组数组中的每个元素转化为字符串。 输出用逗号分隔的字符串列表(可能数组的内部元素(数组)还会再次调
- 用toString(),高维数组扁平化正是利用这点)
- 注意:与不使用任何参数调用的jion()方法返回的字符串一样。
- (不改变原数组)
- 10 split( )--将字符串分割成数组,(',')以逗号分割字符串 ------------------------------ split()
- ( 方法不改变原始字符串 )。
- 11 substring() 方法用于提取字符串中介于两个指定下标之间的字符。 (不修改原字符串!)
-
- 修改数组 字符串的方法,影响原值的 进行分类
- 1.常规方式 递归处理
- 5.扩展运算符
- console.log([].concat(...arr));
- es6中的flat函数也可以实现数组的扁平化
- let arr1 = [1,2,['a','b',['中','文',[1,2,3,[11,21,31]]]],3];
- console.log( arr1.flat( Infinity ) ); 好用简单
- 脱敏:
- 身份证:
- 18位
-
const reg = /^(\d{6})\d{8}(\d{4})$/
-
const tel = mobile.replace(reg, '$1********$2')
- 手机号:
- 11位
-
const reg = /^(\d{3})\d{4}(\d{4})$/
-
const tel = mobile.replace(reg, "$1****$2")
- 获得当前时间戳的 3种方法
- 1 var timestamp = Date.parse(new Date());
- 2 var timestamp = (new Date()).valueOf();
- 3 var timestamp= new Date().getTime();
- 第一种:获取的时间戳是把毫秒改成000显示,
- 第二种和第三种是获取了当前毫秒的时间戳。
- VUEX
- this.store.dispatch():含有异步操作,例如向后台提交数据,写法:this.store.dispatch(‘action方法名’,值)
- this.store.commit():同步操作,,写法:this.store.commit(‘mutations方法名’,值)
- commit: 同步操作
- 存储 this.$store.commit('changeValue',name)
- 取值 this.$store.state.changeValue
- dispatch: 异步操作
- 存储 this.$store.dispatch('getlists',name)
- 取值 this.$store.getters.getlists
- ————————————————
- 一、this.$router.push
- 说明:跳转到指定URL,向history栈添加一个新的记录,点击后退会返回至上一个页面
- this.$router.go(n)
- 二、this.$router.replace
- 说明:跳转到指定URL,替换history栈中最后一个记录,点击后退会返回至上上一个页面
- 说明:类似window.history.go(n),向前或向后跳转n个页面,n可正(先后跳转)可负(向前跳转)
- location.reload() // 为了重新实例化vue-router对象 避免bug
- style="width: 100%"
-
- min-width="160" ---- align="center"
-
-
- 熟悉 后管里 资金方 页面
- 作废 追踪
- 项目管理
- // 取一个数组中第一项中 对象里面的值 ['名字'] = a.name
-
console.log(res.data.contacts[0]['contactPhone'])
-
console.log(res.data.contacts[0].contactPhone)
- 后管作废
- rsa加密
- 后管业务受理 - 业务申请-- 房抵-安售宝 页面
- 监听数据 发起请求
- 对象的 get( ) set( )
- 获取 设置
- new Set 数据类型 相当于对象 不重复
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 默认勾选项:
- 1得到详情数据里面 勾选标识,存数组 this.assOrderIdList = rsp.data.assOrderId ----assOrderId(返回判断标识)
- 2拿到本身表格ref 对象上数据
- 3在this.$nextTick中遍历 两个数据的相同项 勾选
- if ((rsp.code = '0000')) {
-
-
this.tableDataOrder = rsp.data.pageData---- 表格本身的数据
-
const listData = [...this.assOrderIdList] ----- 之前存的数据
-
this.$nextTick(() => {
-
listData.forEach((i) => {
-
.tableDataOrder.forEach((item) => {
-
if (i == item.orderId) {
-
this.$refs.multipleTable.toggleRowSelection(item, true)
-
}
-
})
-
})
-
})
-
}
- 地址选择 -- 传数据 ---回显
- 钉钉----------------------------------------------------
- 属性用引号包裹 因为要点一次数据
- 组件引入在 JSON文件中
- 组件 传参
- 在组件内 接受--------------通过 this.props.params
- FormData的主要用途有两个:、
- 1.将form表单元素的name与value进行组合,实现表单数据的序列化,从而减少表单元素的拼接,提高工作效率
- 2、异步上传文件。
- var formData = new FormData()
- formData.append( 'key', value ) //添加 2、通过append(key,value)在数据末尾追加数据
- 1、通过get(key)与getAll(key)来获取相对应的值 通过has(key)来判断是否存在对应的key值
- set(key, value)来设置修改数据,如果指定的key不存在则会新增一条,如果存在,则会修改对应的value值
- formData.has("k1"); // true
- formData.delete("k1"); //delete(key)删除数据
- Generator函数
- flex 布局
-
- 用 console.log(e.cancelable) 可以检测是否有默认事件返回 true
-
e.preventDefault()
- //阻止冒泡
- e.stopPropagation();
- 路径 绝对路径
-
- 从输入URL到页面加载发生了什么:::
- 总体来说分为以下几个过程:
- 1.DNS解析
- 2.TCP连接 3次握手,客户端发送状态,服务端接受状态, 服务端发起状态,客户端接受 开始传输
- 3.发送HTTP请求
- 4.服务器处理请求并返回HTTP报文
- 5.浏览器解析渲染页面
- 6.连接结束
-
- v-for的优先级是高于v-if的,如果两者同时出现的话 造成性能浪费 可以在外层新增一个模板标签template,在template上使用v-if
- switch 判断
- Reflect 是一个内置的对象,它提供拦截 JavaScript 操作的方法。这些方法与proxy handlers的方法相同。Reflect不是一个函数对象,因此它是不可构造的。
- 微前端
- 1 样式隔离
- 2 .JS 隔离
-
- 渲染 编译时模块级样式prefix 隔离 动态样式挂载和清理 分布式开发 更好的扩展性 交付速度 高效组件服用
- 使用 axios 拦截器解决「 前端并发冲突 」 问题
- 1每次发请求添加 loading
- 2调用 cancel token API 可以取消请求。 axios interceptors API 拦截请求,检测是否有多个相同的请求同时处于 pending 状态,如果有就调用 cancel token API 取消重复的请求
- 为什么 VUE中 data是一个函数 而不是一个对象 :
- 而当组件中的data是一个函数时,通过return,每次都返回一份对象的独立拷贝,当组件进行复用时,也就不会相互影响了,这也是我们想要达到的效果
- 所以组件的数据不能写成对象的形式,而是要写成函数的形式。数据以函数返回值的形式定义,这样当我们每次复用组件的时候,就会返回一个新的data
- 这个时候如果我们将data封装成一个函数,我们在实例化组件的时候只是调用了这个函数生成的数据副本,这就避免了数据污染。
- VUEX
-
-
-
// 2 mutations 改 this.$store.commit('saveCurrDbSource', this.cook)
-
// 3 actions 异步修改 this.$store.dispatch('ACTIONS_CHANGE_BUFF', this.obj)
-
-
-
// 6 import { mapState, mapGetters, mapMutations,mapActions } from 'vuex'
-
// 7 ...mapGetters(['getOrders', 'good', 'getToken']), 在计算属性中
-
// ...mapState(['currDbSource', 'use', 'ff1']), 在计算属性中
-
// 8 ...mapMutations(['saveCurrJobData']), 在methods 中映射
-
// 9 ...mapActions(['saveCurrJobData']), 在methods 中映射
- 项目token设置
- HTTPS 12次TCP握手 需要一个证书,本质是公钥
- 在使用setState更新数据的时候,setState的更新类型分成:new Map
- 键 值 可以是任何形式
- var map = new Map([
-
['a', 11111]
-
])
- console.log(map.get('a')) 等于1111
- new Map 结构 里面两个数组包裹
- 1 set 修改值
- 2 get 得到值
- 3 has 判断是否存在
- 4 delete 删除
- map.call(this) 调用
- 在组件生命周期或React合成事件中, setState是异步
- 在setTimeout或者原生dom事件中, setState是同步
- 如果是下一个state依赖前一个state的话,推荐给setState一个参数传入一个function,如下
- 分页后 选中某一条数据 翻页后 选中项还在---------------------------------------
-
-
-
-
-
-
handleAssOrderChange(val) {
-
选中
-
const selectedIds = new Set([...val.map(i => i.orderId)])
-
const curPageIds = this.tableDataOrder
-
没有选中的
-
const unSelectedIds = curPageIds.filter(i => !selectedIds.has(i.orderId))
-
val.forEach(i => {
-
返回的数据
-
const tempids = this.assOrdermultipleSelection.map(i => i.orderId)
-
遍历选中数据与 后台返回选中项数据,选中中没有 后台 返回选中项 则 添加
-
if (!tempids.includes(i.orderId)) {
-
this.assOrdermultipleSelection.push(i)
-
}
-
})
-
遍历选择完没有选中数据 与 后台返回选中项数据, 查找有则删除
-
unSelectedIds.forEach(i => {
-
const tempids = this.assOrdermultipleSelection.map(i => i.orderId)
-
const index = tempids.indexOf(i.orderId)
-
if (index > -1) {
-
this.assOrdermultipleSelection.splice(index, 1)
-
}
-
})
-
},
-
- 在react 中 componentWillMount 中获取 传参后发起请求,如果数据发生改变 页面没有更新时 把请求放在 componentDidShow 周期内
- 在react 泰罗组件中遍历渲染
- key={String(number)}
- 1最外层给一个大盒子
- 2 大括号里 给判断 -- 接着 -- 小括号 里面在开始数据遍历
-
- 申请信息 -- 新增联系人-- 点击编辑
- async-validator ----------异步校验的库
- less
- 路由传参 ------ ? a='sss'带参数 & 分割参数
- taro 引入 静态文件
- import './css/path/name.scss'
- 引入JS 文件
- import { functionName } from './css/path/name.js'
- react 中 Hooks 使用
- 定时任务
- 后管 H5 位置选择
- 后管 水印-
- VUE自定义指令 -
- Vue.directive('my-directive', {
- bind: function () {},-------------
- inserted: function () {},
- update: function () {},------------
- componentUpdated: function () {},
- unbind: function () {}
- })
- VUE文档中---------
- 在JS文件中使用 VUEX 存的值
- import store from '../store/index'
- console.log(store.state.user.empName)
- 遍历对象除了 FOR IN 外
- Object.keys(a).forEach(i => {
-
console.log(i)
-
})
- document.getElementById('applyBasics').classList.remove('fixed')
- 中 classList 属性返回元素类名.
- element.classList.add(class1, class2, …); 为元素添加类:
- element.classList.contains(class); 查看元素是否存在类:
- 登录页面 短信
- 在 JS 中使用 let
- let不能在js中使用,是es6的语法,需要在js中使用就必须使用严格模式:'use strict';
- let 可以同时声明多个变量暂不赋值
- 一个HTTP请求
- 一个完整的请求都需要经过DNS寻址、与服务器建立连接、发送数据、等待服务器响应、接收数据
- 按需加载组件---在router中配置,使用这种方法可以实现按需加载,一个组件生成一个js文件
- {
- path: '/home',
- name: 'home',
- component:resove => require(['@/components/home'],resolve)
- }
- 使用动态的import()语法(推荐使用这种)
- const test1 = ()=>import('@/components/test1.vue')
- const test2 = ()=>import('@/components/test2.vue')
- //指定了相同的webpackChunkName,会合并打包成y一个js文件
- const test3 = ()=>import(/* webpackChunkName:'grounpTest' */ '@/components/test3.vue')
- const test4 = ()=>import(/* webpackChunkName:'grounpTest' */ '@/components/test4.vue')
- const router = new VueRouter({
-
routes: [
-
{ path: '/test1', component: test1 },
-
{ path: '/test2', component: test2 },
-
{ path: '/test3', component: test3 },
-
{ path: '/test4', component: test4 }
-
]
- })
- 验证码
- 获取元素方式 事件
- getCurrentInstance 获取小程序的 app、page 对象、路由参数等数据
- import Taro, { getCurrentInstance } from '@tarojs/taro'
- $instance = getCurrentInstance()
- // 获取路由参数
- 传参时对特殊字符 编码解码 两种方式
- encodeURIComponent和decodeURIComponent可以编码和解码URI特殊字符(如#,/,¥等),而decodeURI则不能。
- 编码:encodeURI 解码:decodeURI
- var codeVal = encodeURI('20180711#abc');
- var url = 'www.xxx.com?code=' + codeVal;
- console.log(url);
- www.xxx.com?code=20180711#abc
- decodeURI("?code=20180711") //"?code=20180711"
-
- 编码:encodeURIComponent解码:decodeURIComponent
- var codeVal = encodeURIComponent('20180711#abc');
- var url = 'www.baidu.com?code=' + codeVal;
- url;
- "www.baidu.com?code=20180711%23abc"
- decodeURIComponent("?code=20180711%23abc") //"?code=20180711#abc"
- React Hooks------------------------------------------
- promise
-
-
getInfo() {
-
return new Promise((resolve, reject) => {
-
FromDataPost(url, data).then(rsp => {
-
if (rsp.code === '000') {
-
console.log(rsp)
-
resolve()
-
} else {
-
reject()
-
}
-
})
-
})
-
}
-
- 三元表达式对 类名的改变
- 在输入框中插入图标变色
- prefix:插入前面 suffix:插入后面
-
-
- 泰罗样式
- <AtButton formType='submit' className={this.state.password && this.state.passwordCfm ? 'sub-but' : 'dis-sub-but'}>确 认
- 路径 :
- ../ 当前目录 上一级
- 3个值为 --------------上 左右 下
- margin: 20px 40px 60px;(上20px;左、右40px;下60px。)
- 权重
- padding: 0 !important;
- 安居项目名称选择
- 分期 期数
- vertical-align 属性设置元素的垂直对齐方式。
- 泰罗总
- 十字加号图标
- //将数字转换成金额显示
- function fmoney(s, n) {
-
n = n > 0 && n <= 20 ? n : 2
-
s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + ""
-
var l = s.split(".")[0].split("").reverse(),
-
r = s.split(".")[1]
-
t = ""
-
for (i = 0; i < l.length; i++) {
-
t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "")
-
}
-
return t.split("").reverse().join("") + "." + r;
-
}
-
let num = 526245111162158
-
num = fmoney(num)
-
console.log(num);
-
- 泰罗组件库中
- editable为是否可输入
- 遍历对象的几种方法
- background 属性
- background-size: cover;
- background-repeat: no-repeat;
- 引入变量
- import store from '../store/index'
-
console.log(store.state.user.empName)
- import img1 from '../../../static/image/front.png'
- import img2 from '../../../static/image/back.png'
-
img1: img1,
-
img2: img2
- taro 版本升级
- (复制一个package.json 文件 npm i)
- 1 升级依赖 taro update project 3.2.5
- 2 npm install @tarojs/cli@3.2.5
- 3 忽略 npm i 下载包
- 4 添加文件中 config的文件 修改路由参数接受
- 5 对比 config 文件夹中的文件
- react 组件传参
- -------禁止小数点数字
- Number(res.data.yearIncome.replace(/,/gi, '')).toFixed(0)
- toFixed能将数字装换成字符串?
-
// var a = /^([1-9][0-9]*)$/.test(yearIncome)
-
// var b = /^([1-9][0-9]*)$/.test(6000.232)
-
// console.log('ssss')
-
-
-
-
// console.log('ssss')
- 去掉数字前面的0--
- Number.toFixed(x) 是将指定数字截取小数点后 x 位。 都有四舍五入的功能 计算小数点后的长度
- Number.toPrecision(x) 是将整个数字截取指定 x 长度。 都有四舍五入的功能 一个是计算整个数字的长度
- 1.parseFloat(Number),去除小数点后面多余的0,
- 1.丢弃小数部分,保留整数部分
- parseInt(5/2)
- 2.向上取整,有小数就整数部分加1
- Math.ceil(5/2)
- 3,四舍五入.
- Math.round(5/2)
- 4,向下取整
- Math.floor(5/2)
- 5.parseInt(),转化为整数
- 当你想要格式化小数点右边有固定位数的数字时,可以使用toFixed()方法。该方法返回的值是一个字符串,它在小数点后精确地指定了位数。如果没有指定或省略digit参数,则将其视为0。这里有一个例子:
- // 保留2位小数,不足补0
-
function formatFloat(x) {
-
var f = Number(x)
-
if (isNaN(f))
-
return false;
-
var f = Math.round(x * 100) / 100
-
var s = f.toString()
-
var rs = s.indexOf('.')
-
if (rs < 0) {
-
rs = s.length
-
s += '.';
-
}
-
while (s.length <= rs + 2) {
-
s += '0';
-
}
-
return s;
-
}
- 高度 滑动设置------
- 省市区 选择问题-----------
- 工具包里面的时间 封装 ------
- JavaScript中将字符串转为数组的方法
- 方法1:使用split()方法
- 方法2:使用Array.from()方法
- split 字符串转数组
- let a = '2021-08-24 11:53:22'
- let b = a.split(" ")[0] 先转换成数组 再取第一项值
-
console.log(
-
b
-
)
- 一空格 分割 取第一个
- 数组转字符串
- 1 toString()
- 2 join("=="); //指定分隔符
- pointer-events: none; 不让该元素接受鼠标点击事件
- width: auto;
- text-overflow: ellipsis; 溢出显示省略号
- white-space: nowrap; 规定段落中的文本不进行换行
- transform-origin: center; 以中心为原点 旋转
- flex-wrap: wrap; 规定灵活的项目在必要的时候拆行或拆列。
- caret-color: 说是光标
-
var num = '00125'
-
console.log(~~num); 可以去掉前面多余的0 按位取反 它被用作一个更快的替代 Math.floor() 。
- switch 判断
- NodeJS,
- (1)cookie和localstoraeg的区别
- cookie 放进请求头中,随请求头每次提交,浪费带宽
- localstoraeg 不随请求头提交,可以长时间保存
- new Date().getDay()-------输出星期几
- hooks
- function App () {
- const [ count, setCount ] = useState(0)
- useEffect(() => {
-
document.title = count
- })
- return (
-
<div>
-
页面名称: { count }
-
<button onClick={() => { setCount(count + 1 )}}>点我</button>
-
</div>
-
)
- }
- ————————————————
- 点击按钮 返回顶部
-
<button id="goTop">返回顶部按钮</button>
-
function backTop(btnId) {
-
var btn = document.getElementById(btnId)
-
var d = document.documentElement
-
var b = document.body
-
window.onscroll = set
-
btn.style.display = "none"
-
btn.onclick = function() {
-
btn.style.display = "none"
-
window.onscroll = null
-
this.timer = setInterval(function() {
-
d.scrollTop -= Math.ceil((d.scrollTop + b.scrollTop) * 0.1)
-
b.scrollTop -= Math.ceil((d.scrollTop + b.scrollTop) * 0.1)
-
if (d.scrollTop + b.scrollTop == 0)
-
clearInterval(btn.timer, (window.onscroll = set))
-
}, 10)
-
}
-
function set() {
-
btn.style.display = d.scrollTop + b.scrollTop > 100 ? "block" : "none"
-
}
-
}
-
backTop("goTop");
-
- 根据身份证判断年龄
- // GetAge(identityCard) {
- // let len = (identityCard + '').length
- // let strBirthday = ''
- // if (len == 18) {
- // // 1996 04 02
- // strBirthday = identityCard.substr(6, 4) + '/' + identityCard.substr(10, 2) + '/' + identityCard.substr(12, 2)
- // }
- // //时间字符串里,必须是“/”
- // let birthDate = new Date(strBirthday)
- // let nowDateTime = new Date()
- // // 当前年月-生日年月 = 年龄
- // let age = nowDateTime.getFullYear() - birthDate.getFullYear()
- // if (
- // nowDateTime.getMonth() < birthDate.getMonth() ||
- // (nowDateTime.getMonth() == birthDate.getMonth() && nowDateTime.getDate() < birthDate.getDate())
- // ) {
- // age--
- // }
- // this.setState({
- // commonCredNumberAge: age
- // })
- // return age
- // }
- JS中 reduce--用法----------------------
- style="max-width:270px"