首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ES6 模块化入门

下面是 MDN上关于严格模式的解释:严格模式 变量必须显式声明 函数的形参必须有唯一的名称(否则会报语法错误) 不能使用with 给只读的属性赋值会报错 像 00840 这样的八进制数字会报语法错误 试图...delete 无法删除的属性会报错 delete prop 会报语法错误,可以使用 delete global[prop] eval 不会在所在的词法作用域引入新的变量 eval 和 arguments...不能被改变或赋值 arguments 不会跟踪方法的参数变化 arguments.callee 不再支持,会报 TypeError arguments.caller 不再支持,会报 TypeError...同样的,ES6 模块内部的声明只在模块内部有效。这就意味着,某个模块中的变量,如果没有被导出,在其他模块中就无法使用。...Named Exports 在 CommonJS 中导出时也不是必须将 module.exports 赋值为一个对象,你可以直接改变它的属性。

79220

Module.exports和exports的区别

module.exports对象是由模块系统创建的。 有时这是难以接受的;许多人希望他们的模块成为某个类的实例。 为了实现这个,需要将期望导出的对象赋值给module.exports。...注意,将期望的对象赋值给exports会简单地重新绑定到本地exports变量上,这可能不是你想要的。...注意,就像任何变量,如果一个新的值被赋值给exports,它就不再绑定到module.exports(其实是exports.属性会自动挂载到没有命名冲突的module.exports.属性) require...和module.exports同时赋值时,exports所使用的属性和方法必须出现在module.exports,若属性没有在module.exports中定义的话,出现undefined,若方法没有在...module.exports中定义,会抛出TypeError错误。

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

    前端模块化

    这个变量是一个对象,它的 exports 属性(即 module.exports)是对外的接口。加载某个模块,其实是加载该模块的 module.exports 属性。.../module.js' 此外,要注意两点: export default 实际上是把后面跟着的东西赋值给 default 变量,所以后面不能是变量的声明 因为 export default 是指定的默认输出...因为 module.exports 对象中的 num 属性本来就有值的拷贝了,此方法并不能证明值的拷贝是由 CommonJS 的底层实现的。...另外,原模块导出的变量在 main.js 中表现为一个只读常量,也就是说我们不能在 main.js 中对它重新赋值,这会报错: import { num,obj } from '....对于引用类型,可以给它添加属性,但赋值同样是不行的。

    72520

    【前端】:对象、原型、继承

    对象 1.1. 属性描述符 在 ES5 之前,JavaScript 语言本身并没有提供可以直接检测属性特性的方法,比如判断属性是否是只读。但是从 ES 开始,所有的属性都具备了属性描述符。...属性赋值[[Set]] ? ? ? 2. 原型 [[Prototype]] JavaScript 中的对象都有一个特殊的 [[Prototype]] 内置属性,其实就是对于其他对象的引用。...如果 myObject 对象中包含名为 foo 的普通数据访问属性,这条赋值语句只会修改已有的属性值。...如果在 [[Prototype]] 链上层存在名为 foo 的普通数据访问属性并且没有被标记为只读(writable:false),那么会直接在 myObject 中添加一个名为 foo 的新属性。...如果在 [[Prototype]] 链上层存在 foo,但是它被标记为只读 (writable: false),那么无法修改已有属性或者在 myObject 上创建屏蔽属性。

    1.1K50

    TypeScript一些知识点

    由于元组类型是数组的子类型所以元组类型可以赋值给数组类型,前提是元组中的每一项都符合数组的每一项类型;数组类型是不能赋值给元组类型的。...= new Date(); // OK object object 相比较于 Object 更加严格,只能是对象类型,而不能是 boolean 这样的原始数据类型,同样的也只能调用 Object 类型定义的属性和方法...看一个稍微复杂一点的例子: const a: 'a' = 'a'; // 注意这里的类型使用了 'a' 而不是string, 如果是string则不能用在对象中作为属性 const b: unique...new (foo as any)('123'); // OK 接口 接口可以定义任意对象类型,但无法表示原始类型。...readonly b: number = 1; // 定义一个只读属性b 只读属性必须赋初始值 readonly c: number; // 只读属性初始值在构造函数中赋值 如果不赋值则报错

    11210

    严格模式 – JavaScript

    在普通的JavaScript里面给一个拼写错误的变量名赋值会使全局对象新增一个属性并继续“工作”(尽管后面可能出错:在现在的JavaScript中有可能)。...任何在正常模式下引起静默失败的赋值操作 (给不可写属性赋值, 给只读属性(getter-only)赋值赋值, 给不可扩展对象(non-extensible object)的新属性赋值) 都会抛出异常:...“use strict”; // 给不可写属性赋值 var obj1 = {}; Object.defineProperty(obj1, “x”, { value: 42, writable: false...}); obj1.x = 9; // 抛出TypeError错误 // 给只读属性赋值 var obj2 = { get x() { return 17; } }; obj2.x = 5; //...抛出TypeError错误 // 给不可扩展对象的新属性赋值 var fixed = {}; Object.preventExtensions(fixed); fixed.newProp = “

    1K30

    「趣学前端」元编程,翻书学习时发现的陌生词汇,当然是记个笔记

    可以使用Object的getOwnPropertyDescriptor方法,帮助获取对象上某个属性的属性描述符。如果不存在则会返回undefined。...(Object.getOwnPropertyDescriptor(obj, 'interest')); // => undefined示例代码中不存在interest属性,但是也不是不可以有。...Object.defineProperty()方法可以帮助对象创建一个指定了特性的属性。...,并创建具体普通对象无法企及能力的代理对象。...代理对象可以从目标对象和处理器对象上获取它们的行为,进行特定处理;也可以只拦截对象操作,但仍然把操作委托给目标对象。前一种方式可以帮助创建一个只读器,所有试图写入的操作都会抛出异常。

    38920

    记一次京东前端面试被问到的题目

    s.concat(repeat(s, --n)) : "";}实现深拷贝浅拷贝: 浅拷贝指的是将一个对象的属性值复制到另一个对象,如果有的属性的值为引用类型的话,那么会将这个引用的地址复制给对象,因此两个对象会有同一个引用类型的引用...;}// Module的实现很简单,就是给模块创建一个exports对象,tryModuleLoad执行的时候将内容加入到exports中,id就是模块的绝对路径// 定义模块, 添加文件id标识和exports...然后通过new Module实例化的方式创建module对象,将模块的绝对路径存储在module的id属性中,在module中创建exports属性为一个json对象// 使用tryModuleLoad...tryModuleLoad执行完毕之后module.exports已经存在了,直接返回就可以了// 给模块添加缓存// 添加缓存也比较简单,就是文件加载的时候将文件放入缓存中,再去加载模块时先看缓存中是否存在...我给你解释一下与之相对的弱引用的概念你就明白了在计算机程序设计中,弱引用与强引用相对,被弱引用的对象可以在任何时候被回收,而对于强引用来说,只要这个强引用还在,那么对象无法被回收。

    42440

    Python:@property装饰器的使用

    参考链接: Python @property装饰器 @property:(把方法变成属性调用)  Python内置的@property装饰器就是负责把一个方法变成属性调用的 Python允许我们在程序中手动设置异常...,于是,我们就拥有一个可控的属性操作  # 例1:学生分数设置和获取 class Student(object):     @property     def score(self):        ...,只定义getter方法,不定义setter方法就是一个只读属性  # 例2:学生生日的设置和获取 class Student(object):     @property     def birthday..._birthday s1 = Student() s1.birthday = 1998 print(s1.birthday) print(s1.age()) 请利用@property给一个Screen对象加上...width和height属性,以及一个只读属性resolution  # 例3:计算长方形的面积 class Screen(object):     @property     def width(self

    60720

    JavaScript对象

    如果允许属性赋值操作,它也总是在原始对象上创建属性或对已有的属性赋值,而不会去修改原型链。在JavaScript中,只有在查询属性是才会体会到继承的存在,而设置属性则和继承无关。...delete只是断开属性和宿主对象的联系,而不会去操作属性中的属性。...一旦将对象转换为不可扩展的,将无法再将其转换回可扩展的了。...需要注意,Object.preventExtensions()只影响到对象本身的可扩展性,如果给一个不可扩展的对象的原型添加属性,这个不可扩展的对象同样会继承这些新属性;至此提供了一种从“可扩展”->“...Object.preventExtensions()[不可扩展] -> Object.seal()[不可扩展、自有属性不可配置] -> Object.freeze()[不可扩展、自有属性不可配置、数据属性设置为只读

    77941

    exports 和 module.exports 的区别

    exports.name = name; exports.sayName = function() { console.log(name); } 给 exports 赋值其实是给 module.exports...这个空对象添加了两个属性而已,上面的代码相当于: var name = 'nswbmw'; module.exports.name = name; module.exports.sayName...这是因为,前面的例子中通过给 exports 添加属性,只是对 exports 指向的内存做了修改,而 exports = function(r) { return r * r * Math.PI...,所以我们在 app.js 中调用 area(4) 会报 TypeError: object is not a function 的错误。...所以,一句话做个总结:当我们想让模块导出的是一个对象时, exports 和 module.exports 均可使用(但 exports 也不能重新覆盖为一个新的对象),而当我们想导出非对象接口时,就必须也只能覆盖

    69810

    JavaScript数据属性和访问器属性

    要修改默认属性的特性,必须使用 ES5 的 Object.defineProperty() 方法。这个方法接收三个参数:属性所在的对象、属性的名字和一个描述符对象。...另外需要注意的是当configurable设置为false后无法再将其改为true,且除了writable之外,无法修改其它特性。...在configurable为true的情况下可多次调用Object.defineProperty( )修改同一属性。 在非严格情况下修改无法配置的属性操作会被忽略,在严格模式下会抛出错误。...[[Configurable]] 把 configurable 设置为 false,表示不能从对象中删除属性,如果对这个属性调用 delete,则在非严格模式下什么都不会发生,严格模式下报错。...一旦被设置为 false,那么该属性值就不能被修改(只读)。

    1.6K31
    领券