心智模型中一些有趣的观点

374 阅读3分钟

一、宇宙

  1. 自己的代码(指令)
  2. 值(不存在于我们代码中,只是引用了它们)
    • {}对象 和 函数() 可操纵
    • 原始值 不可改变 离的最远,一直都在,可在代码中引用(召唤)但不可改变、创建

先有值,后有万物 image.png

(1) 值类型

原始值(Primitive Values)

  • 未定义(Undefined)  (undefined),用于无意中漏掉的值。
  • 空值(Null)  (null),用于有意漏掉的值。
  • 布尔值(Booleans)  (true 和 false),用于逻辑操作符。
  • 数字(Numbers)  (-1003.14 之类的),用于数学计算。
  • 字符串(Strings)  ("hello""abracadabra" 之类的),用于文本。
  • 符号(Symbols)  (不常用),用于隐藏实现细节。
  • 大型整数(BigInts)  (不常用,是新的),用于数学中的大数字。

对象和函数(Objects and Functions)

  • 对象(Objects)  ({} 之类的),用于将相关的数据和代码分组。
  • 函数(Functions)  (x => x * 2 之类的),用于引用代码。

image.png

二、值和变量

变量是电线,指向值

电线:1.变量 2. 属性
区别:属性始于对象
*电线永远不能指向变量,指向的是值

U9da5a210fe564841b959c6579f5adbf1p.png

(1) 变量赋值

左边必须是电线,右边必须是表达式

pet = count + ' Dalmatians'; // 表达式可以简单,比如 2 或者'hello',也可以复杂
'war' = 'peace'; // 左边不是电线则不可以

(2) 变量读取

读取的是指向的值
函数传递的时候,也是传递的值,而非变量

console.log(pet); // 实际上我们是在问js:pet指向的值是多少
// js会沿着电线找到值返回告诉我们

*课后练习

三、值

原始值:同样的自身都只有唯一一个值

  • 所有可能的字符串值从一开始就已经存在,并且每个不同的字符串都各有一个值。 对象和函数:每一个都有自己的值
  • 对象会消失吗? 不可以自己delete,但是js会根据垃圾回收原则,没电线指向值得时候 最终会从我的宇宙中消失。

image.png

四、值相等性

Object.is(a,b) // 同值相等 两个是否为一个值 ,值得概念如上
=== 严格相等 //只有2个特殊情况和上面的同值相等不一致
== 宽松相等

比较Object.is(a,b)===
NaN 和NaNtruefalse
0 和 ±0falsetrue

image.png

五、对象属性

属性是电线

(1) 读值

  1. 判断.之前是否为 null或者undefined。 是则报错
  2. 不是则判断 .之后的属性是否存在在对象中,存在返回属性指向的值,不存在返回undefined

(2) 赋值

  1. 找左边
  2. 找右边
  3. 指电线

六、__proto__

let human = {
  teeth: 32
};

let gwen = {
  // "在这里寻找其他的属性"
  __proto__: human,
  age: 19
};

console.log(gwen.teeth); // 32

image.png

let human = {
  teeth: 32
};

let gwen = {
  __proto__: human,
  // 该对象有它自己的 teeth 属性:
  teeth: 31
};

image.png

自己没有再去问别人,一旦我们找到了属性,就停止搜索
使用hasOwnProperty 检查是否含有自己的属性,不会去检查原型

(1)赋值

当我们写入一个对象上不存在的属性时,我们会在对象上创建该属性。通常来说,原型不会被涉及到。

(2)对象原型

let obj = {};
console.log(obj.__proto__); //Object Prototype

image.png