当前位置: 网站首页>小程序开发>小程序制作

温县网站制作要多少钱【域名企业邮箱服务器注册申请办理】温县网络优化公司哪家好、温县软件开发外包价格、温县高端企业网站页面制作设计专业公司、温县微信公众号小程序购物支付搭建制作公司

发表日期: 2021-05-07 09:27:05 浏览次数:80

温县网站制作要多少钱【域名企业邮箱服务器注册申请办理】温县网络优化公司哪家好、温县软件开发外包价格、温县高端企业网站页面制作设计专业公司、温县微信公众号小程序购物支付搭建制作公司


温县,隶属于河南省焦作市,地处豫北平原西部,南滨黄河,北依太行,截至2017年,全县总面积481.3平方千米,辖7个乡镇、4个街道,262个行政村,总人口46.8万,县政府驻温泉街道。 [1] 

古时因境内有温泉而得名,在夏时被称温国,明清隶属怀庆府辖。温县诞生了思想家卜商、三国著名政治家军事家司马懿、北宋画家郭熙等历史名人,是太极拳发源地,温、苏等姓氏起源地。全国闻名的“武术之乡” [2]  、“怀药之乡”和优质小麦种子基地,中国十大休闲旅游县。 [1]  [3] 

2018年,温县完成地区生产总值296.61亿元,城镇居民人均可支配收入达到27876元,农村居民人均可支配收入达到16258元。 [4-5] 


Symbol

es6新增的一种原始类型

试图解决的问题

唯一的属性名

给对象新增一个属性,如何保证这个属性名是独一无二的?

更改 instanceof 的运行方式

function People(){}let p1 = new People();console.log(p1 instanceof People) // true

如何让上面例子中的 instanceof 返回false?

解决的方法

唯一的属性名

es6引入 Symbol 来解决对象新增属性名唯一性的问题,可以通过全局的 Sysbol 函数创建一个 Symbol,就像这样:

let key1 = Symbol()let person = {}// 给person对象新增了一个唯一的属性名key1person[key1] = '11'console.log(person[key1]) // 11

:现在,对象的属性有两种,字符串类型和 Symbol 类型

Symbol 接受一个可选参数,用于描述即将创建的 Symbol,建议你在每次创建 Symbol 都添加这样一段描述,以便于阅读和调试。就像这样:

let fullName = Symbol('full name')let person = {}person[fullName] = 'aaron'console.log('full name' in person) // falseconsole.log(person[fullName]) // aaronconsole.log(fullName) // Symbol(full name)

Symbol是一种新的原始类型(typeof 是最准确也是你最应首选的检测方式),调用 new Symbol() 会报错。

console.log(typeof Symbol()) // symbolnew Symbol() // 报错。Symbole不是构造函数

对于类型转换,Symbol 使用起来不是很灵活,因为其他类型没有与Symbol逻辑等价的值

let id = Symbol()id + '' // 报错:不能将Symbol转换为字符串id + 1 // 报错:不能将Symbol转换为数字console.log(Boolean(id)) // true: Symbol与非空值类似,等价布尔值为true

更改 instanceof 的运行方式

可以通过 Symbol.hasInstance 来更改 instanceof 的运行方式,就像这样:

function People(){}Object.defineProperty(People, Symbol.hasInstance, {value: function(v){console.log(v) // People {}return false}})let p1 = new People();console.log(p1 instanceof People) // false

es6提供了11个内置的 Symbol 值(Symbol.hasInstance就是其一),用于开放以前javascript常见的内部操作,让开发者拥有更多的权限。

补充

全局共享的 Symbol

上面使用 Symbol() 函数的语法,不会在你的整个代码库中创建一个全局的 Symbol 类型;有时我们希望在不同的代码中共享同一个 Symbol;通常,在很大的代码库或跨文档追踪 Symbol 非常困难而且容易出错,出于这些原因,es6 提供了一个可以随时访问的全局 Symnbol 注册表

创建一个全局的Symbol,要使用 Symbol.for() 方法。它只接受一个参数,也就是即将创建的 Symbol 的标识符,这个参数同样也被用作 Symbol 的描述符,就像这样:

// 首先在全局 Symbol 注册表中搜索键为"id"的Symbol是否存在// 存在则直接返回// 不存在则创建,然后注册到全局 Symbol 表中,最后返回let id = Symbol.for('id')let id2 = Symbol.for('id')let obj = {};obj[id] = '111'console.log(obj[id2]) // 111console.log(id) // Symbol(id)console.log(id === id2) // true

可以使用 Symbol.keyFor() 在全局 Symbol 注册表中检索与 Symbol 有关的键。举个例子:

let id1 = Symbol.for('id')let id2 = Symbol.for('id')let id3 = Symbol('id')console.log(Symbol.keyFor(id1)) // id - 全局注册表中有键 id1console.log(Symbol.keyFor(id2)) // id console.log(Symbol.keyFor(id3)) // undefined 全局注册表中没有键 id3

:全局 Symbol 注册表类似全局作用域,尽量使用命名空间以减少命名冲突,例如 jQuery 的代码可以为所有键添加 "jquery" 前缀,就像 jquery.element

内置的Symbol

Symbol.hasInstance

一个执行 instanceof 时调用的内部方法,用于改变 instanceof 的运行方式

每个函数都有一个 Symbol.hasInstance 方法,用于确定对象是否为函数的实例。Symbol.hasInstance 方法只接受一个参数,即要检查的值。

// 创建一个特殊数字类,只有1~10的数字才是它的实例function SpecialNumber(){}Object.defineProperty(SpecialNumber, Symbol.hasInstance, {value: function(v){return (v instanceof Number) && (v >=1) && (v <= 10)}})let eleven = new Number(11)let one = new Number(1)console.log(eleven instanceof SpecialNumber) // false - 11 不在 1~10 的范围内console.log(one instanceof SpecialNumber) // true - 1 在 1~10 的范围
Symbol.isConcatSpreadable

一个布尔值,表明一个对象是否应该 flattened 为它的数组元素。被 Array.prototype.concat() 使用

传给concat的参数被逐一添加到数组末尾,但数组被区别对待,因为js规范声明,传给concat的数组参数,会自动将它们分解为独立的元素

let arr1 = ['bb', 'cc']let arr2 = ['aa'].concat(arr1, 'dd')console.log(arr2) // [ 'aa', 'bb', 'cc', 'dd' ]

禁止区别对待,请看:

let arr1 = ['bb', 'cc']Object.defineProperty(arr1, Symbol.isConcatSpreadable, {// 默认是 truevalue: false})let arr2 = ['aa'].concat(arr1, 'dd')console.log(arr2) // [ 'aa', [ 'bb', 'cc' ], 'dd' ]

定义了一个类数组对象 obj2,Symbol.isConcatSpreadable 为 true 表明属性值应该被当作独立的元素添加到数组中。请看示例:

let obj = {0: 'hello',1: 'aaron',length: 2}let obj2 = {0: 'hello',1: 'aaron',length: 2,[Symbol.isConcatSpreadable]: true}let arr = ['jack'].concat(obj)let arr2 = ['jack'].concat(obj2)console.log(arr) // [ 'jack', { '0': 'hello', '1': 'aaron', length: 2 } ]console.log(arr2) // [ 'jack', 'hello', 'aaron' ]
其他

由于本系列是快速入门,而内置的Symbole值有点对程序编程的味道,剩余的就不在详细介绍。

  • 正则表达式 symbols

    • Symbol.match : 被String.prototype.match()使用

    • Symbol.replace : 被String.prototype.replace()使用

    • Symbol.search : 被String.prototype.search()使用

    • Symbol.split : 被String.prototype.split()使用

  • Symbol.toPrimitive : 对象转为原始值,调用此方法

  • Symbol.toStringTag : 被Object.prototype.toString()调用

  • Symbol.unscopables : 与 with 相关。如果你不使用with,可以忽略它

  • Symbol.iterator : 一个返回迭代器的方法

  • Symbol.species : 用于创建派生对象的构造函数

Object.getOwnPropertySymbols()

像 Object.keys()、Object.getOwnPropertyNames()这样的方法不返回任何 Symbol,所以 es6 添加了一个新方法 Object.getOwnPropertySymbols(),用于检索 Symbol 属性。

此方法返回一个给定对象自身的所有 Symbol 属性的数组。请看示例:

let obj = {c: 'c1', d: 'd1'};let a = Symbol("a");let b = Symbol.for("b");obj[a] = "localSymbol";obj[b] = "globalSymbol";let objectSymbols = Object.getOwnPropertySymbols(obj);// 返回Symbol属性的数组console.log(objectSymbols.length); // 2console.log(objectSymbols)         // [Symbol(a), Symbol(b)]console.log(objectSymbols[0])      // Symbol(a)// 不包括Symbol属性console.log(Object.keys(obj)) // ['c', 'd']console.log(Object.getOwnPropertyNames(obj)) // ['c', 'd']

微信图片_20210425092605.jpg

温县网站制作要多少钱域名企业邮箱服务器注册申请办理温县网络优化公司哪家好、温县软件开发外包价格、温县高端企业网站页面制作设计专业公司、温县微信公众号小程序购物支付搭建制作公司

400-111-6878
服务热线
顶部

备案号: 苏ICP备11067224号

CopyRight © 2011 书生商友信息科技 All Right Reserved

24小时服务热线:400-111-6878   E-MAIL:1120768800@qq.com   QQ:1120768800

  网址: https://www.768800.com  网站建设上往建站

关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|

企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|

400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 昌平殡葬| 朝阳殡葬|

预约专家

欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系

  

服务热线:400-111-6878