首页
学习
活动
专区
圈层
工具
发布

《你不知道的JavaScript》-- 对象(笔记)

1.2 类型 在JavaScript中共有六种主要(语言)类型:string、number、boolean、null、undefined和object。...null有时会被当作一种对象类型,这其实只是语言本身的一个bug,即对null执行 typeof null 时会返回字符串“object”,实际上null本身是基础类型。...不同的对象在底层都表示为二进制,在JavaScript中二进制前三位都为0的话会被判断为object类型,null的二进制表示全是0,自然前三位也是0,所以执行typeof时会返回“object”。...以上方法创建的都是浅不变性,即它们只会影响目标对象和它的直接属性,如果目标对象引用了其他对象(数组、对象、函数等),其他对象的内容不受影响,依然可变。...在ES5中可以使用getter和setter部分改写默认操作,但是只能应用在单个属性上,无法应用在整个对象上。

95520
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Vuex 2.0 源码分析

    install 方法的最后调用了 applyMixin 方法,我们顺便来看一下这个方法的实现,在 src/mixin.js 文件里定义: export default function (Vue) {...我们有必要知道 getter 的回调函数的调用时机,在 Vuex 中,我们知道当我们在组件中通过 this...._wrappedGetters 对象,在遍历过程中,依次拿到每个 getter 的包装函数,并把这个包装函数执行的结果用 computed 临时变量保存。...$watch(() => getter(this.state), cb, options) } 函数首先断言 watch 的 getter 必须是一个方法,接着利用了内部一个 Vue 的实例对象 `...回到 mapState 函数,在调用了 normalizeMap 函数后,把传入的 states 转换成由 {key, val} 对象构成的数组,接着调用 forEach 方法遍历这个数组,构造一个新的对象

    2.3K30

    避开NullPointerException的10条建议

    去访问数组插槽: System.out.println(s.length()); System.out.println(ss[0]); 以下是 NPE 的 Javadoc 概述的 6 个可能发生情况: 在空对象上调用实例方法...(1)尽量避免在未知对象上调用 equals() 方法和 equalsIgnoreCase() 方法,而是在已知的字符串常量上调用 由于 equals() 和 equalsIgnoreCase() 具有对称性...那我们在使用第三方库时,一定要了解它是否是 null 安全的,如果不是,则需要我们自己做好非空校验。...(6)避免不必要的装箱拆箱 如果包装对象为 null,在拆箱时容易发生 NPE。...是不是很眼熟,这和我们在第 8 点说的空对象模式类似,在 Optional 的实现中也采用了这种模式。 (10)细心 嘿嘿,凑个第十点吧。

    2.5K30

    从未看过源码,到底该如何入手?分享一次完整的源码阅读过程

    不过最后的结果倒是出乎我的意料,阅读源码加上整理总结只用了8天左右的时间 在阅读源码之前,我是先去看了一下 Vuex 的官方文档,算是一种回顾、查漏补缺,我也非常建议这样做,因为你看源码,你就会看到这个库里面所有的内容...parent.addChild(path[path.length - 1], newModule) // 在父模块中添加新的子模块 } if (rawModule.modules...在path中存储除了根模块以外所有子模块的名称 * */ forEachValue(rawModule.modules, (rawChildModule, key) =>...context 是一个对象,里面包含了 dispatch 、commit 、getters 、state 、rootGetters 、rootState ,前4个都是在当前模块的上下文中调用的,后2个是在全局上调用的..._wrappedGetters const computed = {} // 遍历getters,将每一个getter注册到store.getters,访问对应getter时会去vm上访问对应的

    2K40

    从未看过源码,到底该如何入手?分享一次完整的源码阅读过程

    不过最后的结果倒是出乎我的意料,阅读源码加上整理总结只用了8天左右的时间 在阅读源码之前,我是先去看了一下 Vuex 的官方文档,算是一种回顾、查漏补缺,我也非常建议这样做,因为你看源码,你就会看到这个库里面所有的内容...parent.addChild(path[path.length - 1], newModule) // 在父模块中添加新的子模块 } if (rawModule.modules..., module.state) ,作用就是调用了 Vue 的 set 方法将当前模块的 state 响应式地添加到了父模块的 state 上,这是因为在之后我们会看到 state 会被放到一个新的 Vue...context 是一个对象,里面包含了 dispatch 、commit 、getters 、state 、rootGetters 、rootState ,前4个都是在当前模块的上下文中调用的,后2个是在全局上调用的..._wrappedGetters const computed = {} // 遍历getters,将每一个getter注册到store.getters,访问对应getter时会去vm上访问对应的

    1.8K20

    Vue0.11版本源码阅读系列三:指令编译

    _bind(def) } 构造函数定义一些属性以及调用了_bind方法,resolveFilters方法会把过滤器以getter和setter分别收集到一个数组里,便于后续循环调用: exports.resolveFilters...} set为: function set(obj, val){ Path.se(obj, path, val) } 简单的说就是生成两个函数,一个用来给实例this设置值,一个用来获取实例this...// 应用过滤器函数 value = _.applyFilters(value, this.readFilters, vm) this.afterGet() return value } 在调用取值函数前调用了...根据上面的分析,我们知道对于v-if这个指令最终肯定调用了_bindDir方法: 进入Directive后在_bind里调用了if指令的bind方法,该方法简化后如下: { bind: function...bind方法之后就是给这个指令创建watcher: 接下来在watcher里给Observer.target赋值及进行取值操作,触发了show属性的getter: 依赖收集完后会调用if指令的update

    1.4K10

    nextTick的理解和作用

    场景说明 最近使用Vue全家桶做后台系统的时候,遇到了一个很奇葩的问题:有一个输入框只允许输入数字,当输入其它类型的数据时,输入的内容会被重置为null。为了实现这一功能,使用了一个父组件和子组件。...这个顺序一理,我们就发现了输入框展示abc不置空的原因:原来form.a的值在主线程中间虽然发生了变化,但是最开始到最后始终为null。也就是说,子组件的props的value没有发生变化。...this.getter) { this.getter = noop; warn( "Failed watching path: \"" + expOrFn + "...随后主线程执行了form.a=null,再次触发了setter。由于都是form.a注册的,在推入微任务队列前会去重,避免watch的回调多次执行。...在加入$nextTick函数以后,在form.a=null之前先执行了nextTick函数,nextTick函数执行了watcher的回调函数的包裹函数,此时form.a的值为abc,旧的值和新的值不一样

    94120

    医疗数字阅片-医学影像-Module: Panel-自定义面板-中-es6-Object.defineProperty()定义属性

    备注:应当直接在 Object 构造器对象上调用此方法,而不是在任意一个 Object 类型的实例上调用。...存取描述符还具有以下可选键值: get属性的 getter 函数,如果没有 getter,则为 undefined。当访问该属性时,会调用此函数。...为了确认保留这些默认值,在设置之前,可能要冻结 Object.prototype,明确指定所有的选项,或者通过 Object.create(null) 将 __proto__ 属性指向 null。...对象 o 拥有了属性 a,值为 37 // 在对象中添加一个设置了存取描述符属性的示例 var bValue = 38; Object.defineProperty(o, "b", { // 使用了方法名称缩写...在 get 和 set 方法中,this 指向某个被访问和修改属性的对象。

    91740
    领券