1.v-model和:model区别
v-model是vue.js中内置的双向数据绑定指令,用于表单控件之外的标签是不起作用的。
:model相当于v-bind:model的缩写,v-bind动态绑定指令,默认情况下标签自带属性的值时固定的。只是将父组件数据传递给子组件并没有实现子 父组件的数据双向绑定。
v-bind:value="message"只是将message变量的值赋给了input的value并无双向绑定 现在是单向绑定算,如果不是引用类型拿message变了这个value也不会变,引用类型子组件改变引用类型的数据的话父组件会改变。 message是父组件的数据哦传给了子组件
哦他把数据能传过来就是单向绑定了,我改了再传回去是双向绑定
父组件是包围在子组件外面的
2.js数据常用方法总结
1.Array.map()
此方法是将数组中的每个元素调用一个提供的函数,结果作为一个新的数组返回,并没有改变原来的数组
let arr=[1,2,3]
let newArr=arr.map(x=>x*2)
2.Array.forEach()
此方法是将数组中的每一个元素执行传进提供的函数,没有返回值。
基本类型是el=2不会改变但用arr【i】会改变原数组,对操作对象也可以改变。
基本数据类型,就是复制一份数据放到栈内存中,所以el也是复制了一份基本数据类型,所以修改el无效。引用数据类型是将堆内存地址复制了一份给el,所以el可以通过地址操作对象。
因为我们使用forEach方法的时候对于每个数据都创建了一个变量el,我们操作的是el变量,对于基本数据类型,el变量就是新创建的一个内存。el变量改变并不影响基本原来地址值的改变。而el变量对应的是引用数据类型时,实际还是一个引用地址,操作它,仍旧操作的是对应的堆内存。
////////
对于基本数据类型:Number、String 、Boolean、Null和Undefined,它们在栈内存中直接存储变量名和值。而Object对象的真实数据存储在堆内存中,它在栈内存中存储的是变量名和堆内存的位置。
arr.forEach(x=>x*2) 不会改变arr arr还是1 2 3 4 5
arr.forEach((x,index)=>{arr[index]=a*2})会改变改arr数组
3.Array.filter()
将所有元素进行判断,满足条件的元素作为一个新的数组返回
const f= value=> value>=3
let newArr=arr.filter(f)
newArr------>3 4 5
4.Array.every()
此方法是将所有元素进行判断返回一个布尔值,如果所有元素都满足判断条件,则返回true,否则为false 最后只返回一个布尔值哦
5.Array.some()
此方法是将所有元素进行判断返回一个布尔值,如果存在元素都满足判断条件,则返回true,若所有元素都不满足判断条件,则返回false
6.Array.reduce()
此方法是所有元素调用返回函数,返回值为最后结果,传入的值必须是函数类型
const add=(a.b)=>a+b
let sum=arr.reduce(add)
7.Array.push() Array.pop() Array.shift()删除数组第一个元素并返回数组,此方法改变了数组
8.Array.unshift()将一个或多个元素添加到数组开头
9. let arr=arr1.concat(arr2) 将多个数组拼接成一个数组
10.arr.toString() arr.join(',') 转化为字符串
11.arr.split('.')
3.slice()和splice()区别
slice(start,end)方法从已有数组返回特定的元素,不包含end,从start到end 不会改变元素组而是返回一个子数组
-1算数组最后一个元素
splice()会改变原数组 用于从数组中添加或删除,返回被删除的项目
arr.splice(开始位置,删除个数,元素)
4.深拷贝
- 迭代递归法
- 序列化反序列化法
1.迭代递归法
for...in 结果发现arr和obj都深拷贝成功了但func date reg err并没有复制成功,因为他们有特殊的构造函数
reflect法 结果和for in一样
lodash中的深拷贝实现 此方法对func和err内存引用无效
2.序列化反序列化法
???具体再补
https://www.cnblogs.com/makai/p/11249986.html
5.call apply bind区别
都是改变this指向
let fn=function(a,b){
console.log(this)
}
fn.call(null);
在非严格模式下若传入的是null undefined则this指向的是window
apply和call基本一致但传参方式不同 apply把需要传递给fn的参数放到一个数组(类数组)中传递
fn.call(obj,1,2)
fn.apply(obj,[1,2])
bind语法和call一样 区别在于立即执行还是等待执行
fn.call(obj,1,2)//改变fn中的this并且吧fn立即执行
fn.bind(obj,1,2)//改变fn中的this但fn并不执行
this改变为obj了,但是绑定的时候立即执行,当触发点击事件的时候执行的是fn的返回值undefined
因为执行了所以onclick=fn.call(obj) 其实是其返回值undefined
所以要=fn.bind(obj)只是预处理其this但并没有执行只有当点击的时候才会把fn执行
6.React中this.handleClick = this.handleClick.bind(this)中的this指向
这句代码是指重新指向所在类
普通函数中this的指向,是this执行时的上下文
箭头函数中this的指向,是this定义时的上下文
因为react先生存虚拟dom树的原因所以this并不是你认为的this
所以我们需要用箭头函数或者用react要求的格式写onclick方法形式
{}否则就是this为undefined
https://blog.csdn.net/qq_34829447/article/details/81705977?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-1.base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-1.base
https://blog.csdn.net/qlin_11/article/details/91126275?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-2.base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-2.base
7.二叉搜索树:BST 8.npm 是 nodejs 的包管理和分发工具。它可以让 javascript 开发者能够更加轻松的共享代码和共用代码片段,并且通过 npm 管理你分享的代码也很方便快捷和简单。 9.vue react 微信小程序底层原理?? 待补充 10.普通函数中react 如果有this他是找不到的 onclick=this.fn也找不到 因为当渲染虚拟dom树之后this已经不是此类了 一开始先编译的时候并不会把此函数找到编译出来等到最后渲染再找函数编译吧 这时候已经找不到了
11.validate是验证