对JS原型链的理解

💡 原文中文,约6100字,阅读约需15分钟。
📝

内容提要

JavaScript有七种原始类型:undefined、boolean、number、string、bigint、symbol和null。number遵循IEEE 754标准,bigint支持任意精度整数。字符串分为基本字符串和字符串对象,后者可调用方法。对象是引用类型,赋值为浅拷贝,深拷贝需特殊处理。函数和数组也是对象,使用原型链进行属性继承。可通过new运算符创建对象实例,类型检测可用Object.prototype.toString.call()。

🎯

关键要点

  • JavaScript有七种原始类型:undefined、boolean、number、string、bigint、symbol和null。
  • number遵循IEEE 754标准,bigint支持任意精度整数。
  • 基本字符串和字符串对象的区别在于,基本字符串不能调用字符串对象的方法。
  • 对象是引用类型,赋值为浅拷贝,深拷贝需特殊处理。
  • null和undefined的区别在于,undefined表示未赋值,null是特意赋值。
  • typeof只能检测原始数据类型,Object.prototype.toString.call()是更安全的类型检测方法。
  • 对象分为内置对象、宿主对象和自定义对象,所有对象都有原型。
  • 函数是对象,使用new运算符可以创建对象实例。
  • prototype、constructor和__proto__是对象原型链的重要属性。
  • in和hasOwnProperty的区别在于,hasOwnProperty只检查自身属性,in可以检查原型链上的属性。
  • __proto__已被废弃,建议使用Object.getPrototypeOf()。
  • JavaScript是函数优先的编程语言,类只是原型链的语法糖。

延伸问答

JavaScript有哪些原始数据类型?

JavaScript有七种原始类型:undefined、boolean、number、string、bigint、symbol和null。

如何区分基本字符串和字符串对象?

基本字符串是通过引号定义的,而字符串对象是通过String构造函数创建的,基本字符串不能调用字符串对象的方法。

什么是JavaScript中的原型链?

原型链是对象继承属性和方法的机制,访问对象属性时会先查找自身属性,如果没有则向上查找原型链。

如何使用new运算符创建对象?

使用new运算符会创建一个新对象,并将其__proto__属性指向构造函数的原型对象。

null和undefined有什么区别?

undefined表示变量已声明但未赋值,null是特意赋值的空值,二者在布尔上下文中都为false。

hasOwnProperty和in运算符有什么不同?

hasOwnProperty只检查对象自身的属性,而in运算符可以检查对象及其原型链上的属性。

➡️

继续阅读