一、宇宙
- 自己的代码(指令)
- 值(不存在于我们代码中,只是引用了它们)
- {}对象 和 函数()
可操纵 - 原始值
不可改变离的最远,一直都在,可在代码中引用(召唤)但不可改变、创建
- {}对象 和 函数()
先有值,后有万物
(1) 值类型
原始值(Primitive Values)
- 未定义(Undefined) (
undefined),用于无意中漏掉的值。 - 空值(Null) (
null),用于有意漏掉的值。 - 布尔值(Booleans) (
true和false),用于逻辑操作符。 - 数字(Numbers) (
-100、3.14之类的),用于数学计算。 - 字符串(Strings) (
"hello"、"abracadabra"之类的),用于文本。 - 符号(Symbols) (不常用),用于隐藏实现细节。
- 大型整数(BigInts) (不常用,是新的),用于数学中的大数字。
对象和函数(Objects and Functions)
- 对象(Objects) (
{}之类的),用于将相关的数据和代码分组。 - 函数(Functions) (
x => x * 2之类的),用于引用代码。
二、值和变量
变量是电线,指向值
电线:1.变量 2. 属性
区别:属性始于对象
*电线永远不能指向变量,指向的是值
(1) 变量赋值
左边必须是电线,右边必须是表达式
pet = count + ' Dalmatians'; // 表达式可以简单,比如 2 或者'hello',也可以复杂
'war' = 'peace'; // 左边不是电线则不可以
(2) 变量读取
读取的是指向的值
函数传递的时候,也是传递的值,而非变量
console.log(pet); // 实际上我们是在问js:pet指向的值是多少
// js会沿着电线找到值返回告诉我们
*课后练习
三、值
原始值:同样的自身都只有唯一一个值
- 所有可能的字符串值从一开始就已经存在,并且每个不同的字符串都各有一个值。 对象和函数:每一个都有自己的值
- 对象会消失吗? 不可以自己delete,但是js会根据垃圾回收原则,没电线指向值得时候 最终会从我的宇宙中消失。
四、值相等性
Object.is(a,b) // 同值相等 两个是否为一个值 ,值得概念如上
=== 严格相等 //只有2个特殊情况和上面的同值相等不一致
== 宽松相等
| 比较 | Object.is(a,b) | === |
|---|---|---|
| NaN 和NaN | true | false |
| 0 和 ±0 | false | true |
五、对象属性
属性是电线
(1) 读值
- 判断
.之前是否为null或者undefined。 是则报错 - 不是则判断
.之后的属性是否存在在对象中,存在返回属性指向的值,不存在返回undefined
(2) 赋值
- 找左边
- 找右边
- 指电线
六、__proto__
let human = {
teeth: 32
};
let gwen = {
// "在这里寻找其他的属性"
__proto__: human,
age: 19
};
console.log(gwen.teeth); // 32
let human = {
teeth: 32
};
let gwen = {
__proto__: human,
// 该对象有它自己的 teeth 属性:
teeth: 31
};
自己没有再去问别人,一旦我们找到了属性,就停止搜索
使用hasOwnProperty检查是否含有自己的属性,不会去检查原型
(1)赋值
当我们写入一个对象上不存在的属性时,我们会在对象上创建该属性。通常来说,原型不会被涉及到。
(2)对象原型
let obj = {};
console.log(obj.__proto__); //Object Prototype