JS笔记之JS数据类型(六)
JS笔记之JS数据类型(六)解构赋值是一种特殊的语法,他使可迭代对象拆包值一系列变量中,而只需要其中的一部分(与python的拆包类似)。
1 在数组中的解构1.1 基本语法1let [var1, var2] = arr;
12345678910// 我们有一个存放了名字和姓氏的数组let arr = ["John", "Smith"]// 解构赋值// 设置 firstName = arr[0]// 以及 surname = arr[1]let [firstName, surname] = arr;alert(firstName); // Johnalert(surname); // Smith
当结构语法配合spilt更加优雅
1let [firstName, surname] = "John Smith".split(' ');
结构并不意味着破坏,原有的数据对象自身没有被修改。
1.2 忽略使用逗号的元素12// 不需要第二个元素, 剩下的元素也被跳 ...
JS笔记之JS数据类型(五)
JS笔记之JS数据类型(五)1 Mapmap 是一个带键的数据项的集合,他和object很像, 但是map允许任意类型的键,而对象的键只能是 字符串和symbol,不管用什么当做对象的key(除了symbol),都会被js转化为字符串。
1.1 方法
new Map() :创建一个map。
map.set(key, value):根据键设置值。map在创建时保留了值插入的顺序。
map.get(key):根据键来返回值,如果不存在key,则返回undefined。
map.has(key):如果key存在返回true,不存在返回false。
map.delete(key):删除指定的key。
map.clear():清空map。
map.size:返回当前元素的个数。
在使用map获取key的值或者设置值时 应该使用 map.get() 或者 map.set() 。
12345678910111213141516let map = new Map();map.set('1', 'str1'); ...
JS笔记之JS数据类型(四)
JS笔记之JS数据类型(四)1 可迭代对象定义可迭代对象是数组的泛化,任何对象都可以被定制为在 for…of循环使用的对象。
在JS中可迭代的内建对象有很多,例如数组,字符串等。
1.1 创建可迭代对象例如我们要让下面的对象,能够使用for…of循环得到下面的结果。
1234567let range = { from: 1, to: 5};// 希望得到的结果// for (let num of range) ... num = 1,2, 3,4,5
使用内建方法:Symbol.iterator (一个专门使对象可迭代的内建Symbol)
给range对象添加一个属性, 即这个方法Symbol.iterator ,这个方法返回一个迭代器:一个有next方法的对象。
for…of 适用于这个被返回的对象。
当for…of循环,希望取得下一个值的时候,就会调用这个和next方法。
next方法返回的结构必须是{done:Boolean, value:any} 当done为true时,循环结束, 否则 ...
JS笔记之JS数据类型(三)
JS笔记之JS数据类型(三)1 数组在JS中数组被定义为:[], 可以存放任意数据类型的元素。
1.1 at获取数组最后一个元素,在Python语言中可以使用 list1[-1],但是JS不可以这样使用,他提供了一个专门的方法:at, 这个方法在旧的浏览器上存在兼容问题。
如果 i >= 0 那么 arr[i] 和 arr.at(i) 结果一致。 如果i为负数,arr.at(i) 则从后往前数。
1.2 pop/push, shift/unshift 方法1.2.1 作用于数组末端的方法:pop:取出并返回数组的最后一个元素, 和上面的 array.at(-1) 结果一致, 但是,pop()会把最后一个元素删除,原数组被修改。空数组返回undefined。
push:在数组的末端添加元素,与 array[array.length] = “” 结果一致
1.2.2 作用于数组首端的方法:shift:取出数组的第一个元素并返回它。
unshift:在数组的首端添加元素。
unshift 和 push 都可以添加多个元素: unshift ...
Python第三方包Dynaconf
Python第三方包Dynaconf的使用不管开发什么项目,我们总会遇到不同的环境下有着不同的配置信息,对于这些配置有应用相关的信息,同时也会有一些比较隐私的配置,比如MySQL或者Redis的账号密码等等。
1 项目中常用的配置方式
类似flask中的app.config可以加载类的模式读取配置信息
123456789101112131415161718import loggingclass Config: LOG_LEVEL = logging.DEBUG class DevConfig(Config): passclass TestConfig(Config): pass class ProdConfig(Config): LOG_LEVEL = logging.INFO
或者使用python-dotenv, 从.env 中加载配置信息,且是遵循了12-factor application原则。具体配置不在赘述。
使用Dynaconf, Dynaconf同样是受到了12-factor application的启发,但是 ...
JS笔记之JS数据类型(二)
JS笔记之JS数据类型(二)
字符串
在 JavaScript 中,文本数据被以字符串形式存储,单个字符没有单独的类型。 字符串是不可变的。
字符串的内部格式始终是 UTF-16,它不依赖于页面编码。
引号
在字符串中有三种引号,单引号和双引号基本相同。但是,反引号允许我们通过 ${…} 将任何表达式嵌入到字符串中。 使用反引号允许字符串跨行。
反引号还允许我们在第一个反引号之前指定一个“模版函数”。语法是:funcstring``。函数 func 被自动调用,接收字符串和嵌入式表达式,并处理它们。你可以在 docs 中阅读更多关于它们的信息。这叫做 “tagged templates”。此功能可以更轻松地将字符串包装到自定义模版或其他函数中,但这很少使用。
特殊字符
在上述的反引号能够换行,特殊字符也可以达到目的。
字符
描述
\n
换行
\r
在 Windows 文本文件中,两个字符 \r\n 的组合代表一个换行。而在非 Windows 操作系统上,它就是 \n。这是历史原因造成的,大多数的 W ...
JS笔记之JS数据类型(一)
JS笔记之JS数据类型(一)原始类型的方法
在JS中允许我们像使用对象一样使用原始类型(数字。字符串等)。
1 字符串与对象的基本区别一个原始值:
是原始类型中的一种值。
在 JavaScript 中有 7 种原始类型:string,number,bigint,boolean,symbol,null 和 undefined。
一个对象:
能够存储多个值作为属性。
可以使用大括号 {} 创建对象,例如:{name: "John", age: 30}。JavaScript 中还有其他种类的对象,例如函数就是对象
1.1 如何解决使原始类型拥有和对象类似的方法?
原始类型仍然是原始的。与预期相同,提供单个值。
JavaScript 允许访问字符串,数字,布尔值和 symbol 的方法和属性。
为了使它们起作用,创建了提供额外功能的特殊“对象包装器”,使用后即被销毁。
所以原始类型可以提供方法,但它们依然是轻量级的。
JavaScript 引擎高度优化了这个过程。它甚至可能跳过 ...
JS笔记之JS对象基础知识(八)
JS笔记之JS对象基础知识(八)1 对象原始值的转换当对象相加或者相减时,使用 alert(obj) 打印会输出什么?
JS不允许自定义运算符对对象的处理方式,我们无法实现特殊的对象处理方法来处理加法或者是其他的运算。
在此类运算的情况下,对象会被自动转换为原始值,然后对这些原始值进行运算,并得到运算结果(也是一个原始值,这是一个重要的限制:因为 obj1 + obj2(或者其他数学运算)的结果不能是另一个对象!
例如我们无法使用对象来表示向量或者是矩阵,或者是成就或者其他。
因此,由于我们从技术上无法实现此类运算,所以在实际项目中不存在对对象的数学运算。如果你发现有,除了极少数例外,通常是写错了。
对象如何转换为原始值,以及如何对其进行自定义。
1.1 转换规则
没有转换为布尔值,所有的对象在布尔值上下文中均为true,只有字符串和数字转换。
数字转换发生在对象相减或应用数学函数时,例如Date对象可以相减,date1-date2 的结果是两个日期之间的差值。
对于字符串转换,通常发生在我们像alert(obj)这样输出一个对象和类似的上下文中。
我们可 ...
JS笔记之JS对象基础知识(七)
JS笔记之JS对象基础知识(七)1 symbol类型根据规范,对象的关键字数据类型只有两种,字符串和symbol类型,如果使用数字或者 true会自动转化为字符串类型。
1.1 symbol定义symbol表示唯一的标识符,可以使用Symbol()来创建这种类型的值。
1let id = Symbol();
创建时,我们可以给 symbol 一个描述(也称为 symbol 名),这在代码调试时非常有用。
12// id 是描述为 "id" 的 symbollet id = Symbol("id");
symbol 保证是唯一的。即使我们创建了许多具有相同描述的 symbol,它们的值也是不同。描述只是一个标签,不影响任何东西。
1234let id1 = Symbol("id");let id2 = Symbol("id");alert(id1 == id2); // false
1.2 使用Symbol在JS中大多数数值都支持字符串的隐士转换,但Symbol不会被自动转换。
1 ...
JS笔记之JS对象基础知识(六)
JS笔记之JS对象基础知识(六)1 可选链 “?.”可选链?.是一种访问嵌套对象属性的安全的方式,即使中间的属性不存在,也不会出现错误。
1.1 “不存在的属性”的问题例如在一个嵌套的对象中,我们获取user对象的address对象的street属性,但是实际上user是一个空对象,此时JS会返回错误,这是正常的返回,但是有时候我们需要的不抛出异常,而是返回undefined,表示user对象的address对象没有该属性。
123let user = {}; // 一个没有 "address" 属性的 user 对象alert(user.address.street); // Error!
又或者是我们获取htmlDOM元素得时候,获取某个元素的 innerHTML 属性,如果获取不到该元素,也会抛出一个异常。
12/ 如果 document.querySelector('.elem') 的结果为 null,则这里不存在这个元素let html = document.querySelector(& ...