JavaScript启示录笔记

  1. 对象是由存储值的已经命名的属性组成。
    2.JavaScript中很多对象都可以表现得像对象,复杂值是对象,原始值可以通过包装器变得像对象,这就就为什么很多人说JavaScript中的所有值都是对象(除了undefined)。
    3.对象是通过使用关键字new调用构造函数或者通过使用字面量表达式来创建的。
    4.在不同类型的构造函数生成的对象,虽然本质是一样的,拥有属性,继承属性,均由构造函数生成,但类型上不是同的,在JavaScript上通常使用对象来表示值的。
    5.JavaScript实际上是一种预包装若干原生对象构造函数的语言,这些构造函数用于生成一些特定的类型值,如数字、字符串、函数、对象、数组的复杂对象(引用对象),也可以通过Function对象创建自定义的构造函数(构造函数是Function对象),构造函数的作用是创建多个共享特定特性和行为的对象,构造函数主要用于生成对象的饼干模具,这些对象有默认的属性和属性方法。构造函数在不用new来调用的时候只是一个函数,用new来调用的时候将会变成构造器,将该函数的this值设置称为正在构建的新对象,还默认返回新创建的对象(即为this,代词),该函数返回的新对象则被认为是构建该对象的构造函数的实例。(构造对象返回的对象被称为实例)。
    6.JavaScript预包装了9个原生对象:Number、String、Boolean、Object、Array、Function、Date、RegExp、Error。
    7.Math对象是一个静态对象,而不是构造函数,即意味不能用new来调用它,好像它已经是实例化好的一样,实际上Math对象只是一个由JavaScript设置的对象命名空间,用来存储数学函数。
    8.Number、String、Boolean这三个构造函数不仅能够构建对象,而且能为字符串、数字、布尔值提供原始值,如果只是简单的在代码表示一个数字、字符串、布尔值的话,那么构造函数返回来是一个原始值,而不是一个复杂的对象值。
    9、尽量让构造函数的第一个字符大写
    10、在不使用new关键字和构造函数的时候,直接用函数编写对象可以有效的避开原型链(原型继承),如果不显性的编写返回值的话,系统会默认的返回一个undefined。
    11、null、undefined、“string”、10、true、false是原始值。“string”、10、true、false没有对象特性,但可以通过包装器来让它们拥有对象的特性,但使用后又会变回成原始值。
    12.原始值是通过值来存储的,是表示JavaScript中可用的数据、信息的最底层形式(最简单的形式)。复杂对象(引用对象)是可以由多个不同类型的JavaScript对象组成的,通过引用进行存储的,只有在指向同一个对象时(相同的地址),一个复杂值才会等于另外一个复杂值。由于JavaScript复杂对象和引用的特性,JavaScript对象是具有动态属性。
    13.typeof操作符用于返回正在使用值的类型,但它返回的值有时候不一致,null返回是Object,实际是历史原因,为了避免大量的旧的网页网站崩溃,所以依旧是返回Object,其他对象返回Object,除了Function和RegExp返回是Function类型。
    14.构造函数实例都拥有指向其构造函数的这一Constructor属性。例如无法知道谁或什么创建了它,那就可以通过这个属性来确定它是数组或字符串等等。对于是用户自定义的构造函数表达式,如果想要让constructor属性记录构造函数的实际名称,就必须给予构造函数表达式一个实际的名称。在构造函数不回返对象的时候,使用原始值的时候依旧调用了构造函数,因此构造函数跟原始值依旧有关系,最终的结果是原始值。(见总结8)。
    15.通过使用instanceof操作符,可以确定(true或false)一个对象是否是特定的构造函数的特例,同时也适用于用户自定义的对象,但是使用instanceof操作符时需要注意的一件事情是,任何时间判断一个对象是否是Object的实例的时候都会返回true。instanceof只适用于构造函数创建返回的复杂对象和实例,对于原始值使用对象包装器,判定实例时会返回一个false,如果是用new来创建字符串'foo',那会返回一个true.
    16.可以使用点表示法或中括号表示法获取、设置或更新对象的属性。在属性名称为JavaScript无效标识符的时候,中括号可以派上用场,如将一个数字和一个保留关键字用作属性名称,只有中括号表示法可以访问它们。
    17.delete对象是用于将属性从一个对象中完全删除,delete不会删除在原型链上找到的属性,undefined或null只能是改变属性的值,而不会将属性从对象中删除。
    18.原型链,在查找对象属性的时候,首先会查看对象的引用属性,如果没有找到,则继续在构造函数的prototype属性上进行查找,如果还是找不到的,由于原型拥有一个对象值并且该值是有Object构造器创建的,因此在Object构造函数的prototype属性进行查找,如果还是找不到,就指向null并返回一个属性值undefined
    19.proto与constructor
    20.使用hasOwnProperty验证对象属性是不是来自原型链
    21.使用in操作符检查一个对象是否包含给定属性,而且能够查找所有包含在原型链上的属性
    22.for in循环枚举对象属性,有个缺点就是,它不仅仅会遍历特定对象的自身属性,还会遍历所继承原型链的对戏那个的属性,所以为了避免这个问题会是if语言,以确定我们只访问特定对象的自身属性。
    23.函数是第一等公民,除了拥有函数的特性,还能被调用。
    24.Function中的arguments不推荐使用,函数的定义有函数构造函数、函数语句、函数表达式
    25.调用函数有,作为函数、作为方法、作为构造函数、使用apply或call。
    26.函数可以接收、返回其他函数,有时会被称为“高阶函数”,函数也可以调用自身。
    27.函数语句(不是函数表达式)在真正定义之前,可在执行时调用该函数语句,原因是函数语句实际上已经被编译器解析,并添加至执行堆栈\上下文中。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容