
No more than code.
typeof 和 instanceof 都是用来判断变量类型的,两者的区别在于:
typeof 判断所有变量的类型,返回值为6个字符串,分别为 string、Boolean、number、function、object、undefined。
typeof 对于丰富的对象实例如 null、array、object 以及函数实例(new + 函数),只能返回”Object”字符串,得不到真正的数据类型。
instanceof 用来判断对象,代码形式为obj1 instanceof obj2(obj1是否是obj2的实例),obj2必须为对象,否则会报错!其返回值为布尔值。
instanceof 可以对不同的对象实例进行判断,判断方法是根据对象的原型链依次向下查询,如果obj2的原型属性存在obj1的原型链上,(obj1 instanceof obj2)值为true。
var a = [34,4,3,54],
b = 34,
c = 'adsfas',
d = function(){console.log('我是函数')},
e = true,
f = null,
g;
console.log(typeof(a));//object
console.log(typeof(b));//number
console.log(typeof(c));//string
console.log(typeof(d));//function
console.log(typeof(e));//boolean
console.log(typeof(f));//object
console.log(typeof(g));//undefined
v-show 仅仅控制元素的显示方式,将 display 属性在 block 和 none 来回切换;而v-if会控制这个 DOM 节点的存在与否。当我们需要经常切换某个元素的显示/隐藏时,使用v-show会更加节省性能上的开销;当只需要一次显示或隐藏时,使用v-if更加合理。
侦听属性 watch
计算属性 computed
更多:
事实上 computed 会拥有自己的 watcher,它内部有个属性 dirty 开关来决定 computed 的值是需要重新计算还是直接复用之前的值。
以这样的一个例子来说:
computed: {
sum() {
return this.count + 1
}
}
首先明确两个关键字: 「dirty」 从字面意义来讲就是 脏 的意思,这个开关开启了,就意味着这个数据是脏数据,需要重新求值了拿到最新值。 「求值」 的意思的对用户传入的函数进行执行,也就是执行 return this.count + 1
在 sum 第一次进行求值的时候会读取响应式属性 count,收集到这个响应式数据作为依赖。并且计算出一个值来保存在自身的 value 上,把 dirty 设为 false,接下来在模板里再访问 sum 就直接返回这个求好的值 value,并不进行重新的求值。 而 count 发生变化了以后会通知 sum 所对应的 watcher 把自身的 dirty 属性设置成 true,这也就相当于把重新求值的开关打开来了。这个很好理解,只有 count 变化了, sum 才需要重新去求值。 那么下次模板中再访问到 this.sum 的时候,才会真正的去重新调用 sum 函数求值,并且再次把 dirty 设置为 false,等待下次的开启……