javascript笔记

js笔记

  • js中只是声明而没有赋值的变量为“undefined”,表示无定义
  • javascript引擎的工作方式是,先解析代码获取所有被声明的变量,然后再一行行运行,这会造成所有变量的声明语句被提升到代码头部,即变量提升。如:
    console.log(a);
    var a = 1;
    //实际执行的是
    var a;
    console.log(a);
    a = 1;
    这种情况不会报错,因为存在变量提升,所以结果是,undefined
  • break语句是跳出代码块或循环
    而continue语句是终止本轮循环,返回循环头部,开始下一轮循环
    注:存在多层循环,不带参数的break和continue都只针对最内层循环
  • typeof
    数值 ------- number
    字符串 ----- string
    布尔值 ----- boolean
    函数 ---------function
    undefined---undefined
    []/{}------------object
    window-------object
    null-------------object
    (null是由于一开始js只考虑了五种数据类型,只把null当成一种object的特殊值,后来null独立出来作为一种单独的数据类型,为了兼容以前的代码没有改变)
  • null和undefined
    null表示该处的值为空,是不存在的事物,可以通过设置值为null来清空对象,转为数值时是0
    undefined表示‘未定义’,转为数值时是NaN,通常是:
    //变量声明未赋值
    var i;
    i   //undefined 
    //调用函数,应该提供的参数没有提供
    function f(x) {
       return x;
    }
    f()   //undefined
    //对象未赋值的属性
    var o = new Object();
    o.p           //undefined
    //函数没有返回值时,默认返回undefined
    function f(){}
    f()         //undefined
  • 以下布尔值为false
    null,undefined,false,0,NaN,"",''
  • javascript 中所有数字都是以64位浮点数形式存储
    所以: 1 === 1.0 //true
    提供的有效数字最长(即精度):53 个二进制位即绝对值小于2的53次方,超出之后,多出来的有效数字无法保存,变成0
  • Number对象的MAX_VALUE和MIN_VALUE属性返回具体最大最小值
    Number.MAX_VALUE;    //1.7976931348623157e+308
    Number.MIN_VALUE;    //5e-324
  • 以下情况js自动转换为科学计数法
    小数点前多于21位,小数点后0多于5个
  • NaN
    NaN === NaN    //false
    Boolean(NaN)   //false
    typeof NaN   //' Number'
    [NaN].indexOf(NaN)   //-1
    //Infinity或-Infinity 与 NaN 比较也是 false
  • isNaN
    isNaN方法只对数值有效,其他会被先转换成数值
    isNaN('Hello')   //true     相当于isNaN(Number('Hello'))
    //对象和数组   {}/['xyz']     true
    //空数组和只有一个数值成员
    isNaN([])   //false
    isNaN([123])   //false
    isNaN(['123'])    //false
  • isFinite
    返回布尔值,表示是否为正常数字
    Infinity/-Infinity/NaN/undefined 返回 false
  • 转义字符
    \u : null \r : 回车
    \b : 后退 \t : 制表
    \f : 换页 \v : 垂直制表符
    \n : 换行
  • Base64转码
    一种编码方式,将任意值转成可打印字符
    btoa()   //: 任意值转成Base64编码
    atob()   //: Base64编码转回原来的值
    //非ASCII码字符报错
  • argument
    argument对象包含了函数运行时的所有参数,argument[0]就是第一个参数,以此类推
  • promise
    promise是一个对象,也是一个构造函数
    通过自身的状态控制异步操作
    pending-----未成功
    fulfilled-------成功
    rejected------失败
    这三种状态的变化途径只有未成功到成功或失败,一旦状态变化就凝固了,也就是promise实例的状态变化只能发生一次,所以最终只有两种结果。
  • promise构造函数
    //Promise构造函数接受一个函数作为参数
    //resolve参数将Promise实例的状态从未完成 变成 成功
    //reject将未完成 变成 失败
    var promise = new Promise(function(resolve,reject){
       //.......
       if(/*fulfilled*/){
       resolve(value);
       }else(/*rejected*/){
       reject(new Erro);
       }
    });
  • Set
    Set本身是一个构造函数,用来生成Set数据结构,Set结构不会添加重复的值。
    向Set加入值时,不会发生类型转换(Set加入值认为NaN等于自身)
    .size //返回Set实例的成员总数
    .add //添加值,返回Set结构本身
    .has //返回布尔值,表示是否是Set的成员
    .delete //删除某个值,返回布尔是否成功
    .clear //清除所有成员,无返回值
    Array.from可以把Set结构转为数组
    去除数组重复
    function dedupe(array){
       return Array.from(new Set(array));
    }
       dedupe([1,1,2,3])   //[1,2,3]
  • Set遍历*
    keys(),values(),entries(),forEach()
    键名,键值,键值对,回调函数遍历每个成员
  • 遍历顺序就是插入顺序*
  • Map
    Map提供 : 值---值 的对应
  • Iterator
    遍历器,是一种接口,提供统一的访问机制。
    主要供for..of消费
    遍历过程主要是:
    创建一个指针对象,对象的next方法指向数据结构的第一个成员,不断被调用直到指向结束位置。
    var it = makeIterator(['a','b']);
    it.next();  //{value:"a",done:false}
    it.next();  //{value:"b",done:false}
    it.next();  //{value:undefined,done:true}
    function makeIterator(array){
       var nextIndex = 0;
       return{
       next: function(){
           return nextIndex < array.length ?
    //        {value:array[nextIndex++],done:false} :
    //       {value:undefined,done:true};
    //可简写
             {value: array[nextIndex+=]} :
              {done: true};  
           }
       };
    }
  • 原生具备Iterator接口
    Array,Map,Set,String,TypedArray,函数的arguments对象,NodeList对象
    扩展运算符也会调用默认的Iterator接口
  • for...of
    作为遍历所有数据结构统一的方法
    可以与break,continue,return配合使用
  • Generator
    语法上理解为封装多个内部状态
    形式上理解为function与函数名间有*,内部使用yield定义状态
    function* helloWorldGenerator(){
       yield 'hello';  
       yield 'world';
       return 'ending'; 
    }//函数不执行,返回的是一个指向内部状态的指针对象
    var hw = helloWorldGenerator();
    //必须调用next方法使指针移向下一个状态
    hw.next();//{value: 'hello',done: false}
    hw.next();//{value: 'world',done: false}
    hw.next();//{value: 'ending',done: false}
    hw.next();//{value: undefined,done: true}
    //next方法遇到yield表达式就暂停执行后面的操作,并紧跟yield
    //后面的那个表达式的值,下一次再向下...
    for..of遍历Generator一旦next返回true就会停止,且不返回这个对象
  • async
    执行和普通函数一样
    asyncReadFile();
    async+await代替*+yield
    async函数返回Promise对象(意味着可以使用then)
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务