• JS权威指南需要注意的知识点(1-6章)


    客官快来看一看了,都给你浓缩好了,确定不进来搂一眼嘛,走过路过不要错过哟

    in运算符

      in运算符希望它的左操作数是一个字符串或可以转化为字符串,希望它的右操作数是一个对象,如果右侧的对象拥有一个名为左操作数值的属性名,则表达式返回true,否则为fasle 

    var obj = {X:1,Y:2}
    "X" in obj   // true
    "Z" in obj  //false
    "toString" in obj  //true:对象继承了toString()方法
    
    var data = [7,8,9]
    "0" in data   //true: 查找的是下标0
    1 in data    //true:查找的下标1    
    3 in data    //  fasle: 下标3不存在
    "toString" in obj //true:对象继承了toString()方法
     

      注意点:无论是对象还是数组,toString等从原型链上继承的方法也能查找的到,但右操作数为数组时,若为数字或者可转化成数字的字符串则查找的是下标

    逻辑与(&&)

      在赋值的时候需要要特别注意:左假返左,左真返右

    let a = false && 1   //a:false
    let a = true && false //a:false
    let a = true && 1 // a: 1

      即赋值时&&左边为假,则直接返回左边,不管右边真假都不在继续看右边,若左边为真则直接返回右边,无论右边真假

    eval()

      eval()是js用来解释运行源代码组成的字符串的一个函数,它只接受一个参数,若参数不是字符串则返回该参数,而是字符串则将字符串当做JS源码进行编译。

      特点:

        使用了调用他的变量作用域环境,并且具有改变局部变量的能力

        直接调用eval时,他会在调用他的上下文作用域执行,而间接调用则会使用全局对象作为其上下文作用域

        严格模式下,只允许eval执行查询或者更改局部变量,不允许新建

     

    delete

      删除数组元素时并不会改变数组的长度,即相当于将被删除的元素设置为undefined

    var 

      var声明的变量无法通过delete删除

        变量声明语句会进行提升,赋值语句则还在语句原来的位置执行

    var a = 12;
    delete a;
    console.log(a); //12

    function

      函数声明语句会被进行函数声明提升,也就是说可以在一个函数声明之前调用它

    if else

      else总是和就近的if想匹配

    for in

      for in循环遍历时不会遍历对象的所有属性,而只是会遍历所有的可枚举属性,例如toString这种内置方法则并不会被遍历出来

    try  catch finally

      不管try抛错不抛错,finally始终会执行

       当try由于return,continue,break语句使得解释器跳出try语句块时,解释器在执行新的目标代码时会先执行finally中的逻辑

             如果finally使用了return,continue,break或者throw语句使整个程序发生跳转,不管try是否抛出异常,这个方法仍然会正常返回

    with

      用于临时扩展作用域链,步骤:将扩展的对象添加到作用域链头部,执行语句,然后恢复作用域链。严格模式禁用,非严格模式也不推荐使用,因为会降低性能

       with提供了读取对象属性的快捷方案,但是并不能创建对象的属性

     use strict

      意为使用严格模式,只有在实现了ECMAScript的JavaScript解释器中才起作用

      只能出现在代码的开始或者函数体的开始

      在严格模式中调用函数的一个this是undefined,而在非严格模式下则为全局对象

      判断浏览器支持不支持严格模式(即判断有没有实现ECMAScript5)

    var hasStrictMode = (function(){
       "use strict";
       return this === undefined  
    }())

    对象

      JS对象不仅仅是字符串到值的映射,除了保持自有的属性,JS对象还可以从一个称为原型的对象继承属性,对象的方法通常是继承的方法,这种'原型式继承' 是JS的核心特征。

        定义对象时,属性名可以是包含空字符串在内的任意字符,但对象中不能存在两个同名的属性

    var test = {
         '':123       
    }    
    console.lof(test[''])    // 123
    

      JS对象和属性划分

        内置对象:由ECMAScript规范定义的对象或类,如数组,函数,日期和正则

        宿主对象:由JavaScript解释器所嵌入的宿主环境所定义的,客户端中表示网页结构的HTMLElement对象均是宿主对象

        自定义对象:是由运行中的JavaScript代码创建的对象

        自有属性:是直接在对象中定义的属性

        继承属性:是在对象的原型对象中定义的属性

    Object.create()

      它创建一个新对象,第一个参数是这个对象的原型

       创建一个没有原型的对象: Object.create(null)

    对象

      内置构造函数的原型是只读的

    delete

      delete只是断开属性和宿主对象的联系,而不会去操作属性中的属性,例子在下方

      delete只能删除自有属性,不能删除继承属性(要删除继承属性必须从定义这个属性的原型对象上删除,而且会影响所有继承了这个原型的对象)

      delete也不可以删除那些可配置性为false的属性

    a = {p:{x:1}}
    b=a.p
    delete a.p
    console.log(a)  // 1
    

    枚举属性名称的方法

       1. for in  会遍历对象中所有的可枚举属性(包括自有属性和继承属性)

        2.object.keys() 返回一个数组,包括可枚举的自有属性

        3.Object.getOwnPropertyNames() 返回所有自有属性的名称

    Object.getOwnPropertyDescriptor()

      获取自有属性的描述符

    Object.defineProperty()

      设置属性的特性,但是只能设置或者修改自有属性

    Object.getPrototypeOf()

      用来查询对象的原型

    isPrototypeOf()

      检测一个对象是否是另一个对象的原型

    对象的三个属性

       原型属性: 用来继承属性的

       类属性: 是一个字符串,表示对象的类型信息

       可扩展性:表示是否可以给对象添加新属性,内置对象和自定义对象是显式可扩展的,但是宿主对象的是否可扩展由JS引擎来决定

    JSON

      1.json的语法是JS语法的子集,它并不能表示JS里面的所有值,支持对象,数组,无穷大数字,true,false,null,并且可以序列化和还原,注意:NAN,Infinity和-Infinity序列化后的结果是null

       2.日期对象序列化的结果是ISO格式的日期字符串,但JSON.parse()依旧保留他们的字符串形态,而不会将他们还原为原始日期对象

       3.函数,RegExp对象和Error对象以及undefined不能序列化

       4.JSON.stringify()只能序列化对象的可枚举的自有属性(即调用Object.keys()所列出的)

    toString()

      注意:

    var test = {a:1,b:2}.toString()
    console.log(test)    // [object Object]

      由于这种默认的toString()并不会携带很多有用的信息,有很多类都携带着自定义的toString(),例如Array.toString(),Date.toString(),以及Function.toString()等

    toLocaleString()

      返回一个表示这个对象的本地化字符串,Object中默认的toLocaleString()方法并不做任何本地化自身的操作,仅仅是调用toString()方法并返回对应值,但是Date和Number则对其做了定制,可以用它来对时间,日期,时间做本地化的转换。Array类的toLocaleString()和toString()不同的是每个数组的元素都会调用toLocaleString()方法转化为字符串,而不是调用toString()

  • 相关阅读:
    【计算机图形学】变换 (Transform)
    [图像处理]基于 PyTorch 的高斯核卷积
    [PyTorch] torch.squeee 和 torch.unsqueeze()
    【图像分析】边缘检测中的图像梯度以及各种梯度算子的介绍
    你买的课程看了吗?
    为什么用抓包工具看HTTPS包是明文的
    定制化Fiddler
    软件测试常见网络相关面试题
    单线程和多线程执行对比—Python多线程编程
    多线程实践—Python多线程编程
  • 原文地址:https://www.cnblogs.com/suihang/p/11450647.html
Copyright © 2020-2023  润新知