当前位置:
首页 > 网站开发 > JavaScript教程 >
-
知识杂点小记(一)
1. delete操作符返回一个布尔值: true指删除成功,否则返回false. 但是通过 var, const 或 let 关键字声明的变量无法用 delete 操作符来删除。
const name = "Lydia";
age = 21;
console.log(delete name); //false
console.log(delete age); //true
用delete关键字删除对象的属性,对原型也是适用的。删除了原型的属性后,该属性在原型链上就不可用了。
class Dog {
constructor(name) {
this.name = name;
}
}
Dog.prototype.bark = function() {
console.log('Woof I am ${this.name}');
};
const pet = new Dog("Mara");
pet.bark(); //"Woof I am Mara"
delete Dog.prototype.bark;
pet.bark(); //TypeError
2. 通过 let 和 const 关键字声明的变量也会提升,但是和 var 不同,它们不会被初始化。在我们声明(初始化)之前是不能访问它们的。这个行为被称之为暂时性死区。
function sayHi() {
console.log(name); //undefined
console.log(age); //ReferenceError
var name = 'Lydia';
let age = 21;
}
sayHi();
通过 var 关键字声明的,值是全局作用域下的,通过 let 和 const 关键字声明的变量是拥有块级作用域。
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 1) //3 3 3
}
for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 1) //0 1 2
}
function checkAge(age) {
if (age < 18) {
const message = "Sorry, you're too young."
} else {
const message = "Yay! You're old enough!"
}
return message
}
console.log(checkAge(21)) // ReferenceError
function checkAge(age) {
if (age < 18) {
var message = "Sorry, you're too young."
} else {
var message = "Yay! You're old enough!"
}
return message
}
console.log(checkAge(21)) // "Yay! You're old enough!"
3. 对于箭头函数,this 关键字指向的是它当前周围作用域(简单来说是包含箭头函数的常规函数,如果没有常规函数的话就是全局对象),这个行为和常规函数不同。
const shape = {
radius: 10,
diameter() {
return this.radius * 2
},
perimeter: () => 2 * Math.PI * this.radius
}
shape.diameter(); // 20
shape.perimeter(); // NaN
这意味着当我们调用 perimeter 时,this 不是指向 shape 对象,而是它的周围作用域(在例子中是 window)。在 window 中没有 radius 这个属性,因此返回 undefined。
4. 六种 falsy 值(虚值)
- undefined
- null
- NaN
- 0
- '' (empty string)
- false
5. JavaScript 只有基本类型和对象。
基本类型包括 boolean, null, undefined, bigint, number, string, symbol。
6. 用defineProperty方法添加的属性默认不可变。可以通过writable, configurable 和 enumerable属性来改变这一行为
const person = { name: "Lydia" };
Object.defineProperty(person, "age", { value: 21 });
console.log(person); //{ name: "Lydia", age: 21 }
console.log(Object.keys(person)); //["name"]
通过defineProperty方法,我们可以给对象添加一个新属性,或者修改已经存在的属性。而我们使用defineProperty方法给对象添加了一个属性之后,属性默认为 不可枚举(not enumerable). Object.keys方法仅返回对象中 可枚举(enumerable) 的属性,因此只剩下了"name".
7. JSON.stringify的第二个参数是 替代者(replacer). 替代者(replacer)可以是个函数或数组,用以控制哪些值如何被转换为字符串。
const settings = {
username: "lydiahallie",
level: 19,
health: 90
};
const data = JSON.stringify(settings, ["level", "health"]);
console.log(data); //"{"level":19, "health":90}"
在本例中,只有名为"level" 和 "health" 的属性被包括进来, "username"则被排除在外。 data 就等于 "{"level":19, "health":90}".
8. 一元操作符 i++ 先返回 操作值, 再累加操作值。++i 先累加再返回值
let num = 10;
const increaseNumber = () => num++;
const increasePassedNumber = () => ++num;
const num1 = increaseNumber();
const num2 = increasePassedNumber(num1);
console.log(num1); //10
console.log(num2); //12
9. 每个Symbol都是完全唯一的。传递给Symbol的参数只是给Symbol的一个描述。 Symbol的值不依赖于传递的参数。 当我们测试相等时,我们创建了两个全新的符号
console.log(Number(2) === Number(2)) /true
console.log(Boolean(false) === Boolean(false)) //true
console.log(Symbol('foo') === Symbol('foo')) //false
10. ES2017 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。
const name = "Lydia Hallie"
console.log(name.padStart(13)) // " Lydia Hallie"(前面插入一个空格)
console.log(name.padStart(2)) // "Lydia Hallie"
11. 通过for-in循环,我们可以遍历一个对象自有的、继承的、可枚举的、非Symbol的属性。 在数组中,可枚举属性是数组元素的“键”, 即它们的索引。
通过for-of循环,我们可以迭代可迭代对象(包括 Array,Map,Set,String,arguments等)。当我们迭代数组时,在每次迭代中,不同属性的值将被分配给变量item。
const myLifeSummedUp = ["☕", "
最新更新
springboot~某个接口模拟登录并同步给feig
Java反射中与自动装箱有关的坑及其解决方
java 基础语法学习
面试被问Java序列化和反序列化为什么要实
你还在用命令看日志?快用 Kibana 吧,一
【JAVA并发第一篇】Java的进程与线程
【JAVA并发第四篇】线程安全
初窥MyBatis-普通的CRUD操作
mybatis(1)
HTTP常用请求头大揭秘
MongoDB常用命令(2)
MongoDB基本介绍与安装(1)
SQLServer触发器调用JavaWeb接口
SQL Server索引的原理深入解析
SqlServer2016模糊匹配的三种方式及效率问题
SQL中Truncate的用法
sqlserver 多表关联时在where语句中慎用tri
链接服务器读取Mysql---出现消息 7347,级别
SQL Server解惑——为什么你拼接的SQL语句换
MySQL视图了解一下
es6 快速入门 系列 —— 类 (class)
前端 Validform.js属性,用法及Ajax提交简介
前端甘特图dhtmx-gantt
Typescript开发学习总结(附大量代码)
koa2+mock实现一个数据服务器
JavaScript 面向对象编程思想的理解
js原型和原型链
有关Js 创建对象的几种方式
Js 原型链
js中的隐式转换