js笔记

作者: 张东山 | 来源:发表于2019-12-05 15:30 被阅读0次

    基本数据类型

    • Number (常规字和NaN)
    • String (所有用单引号、双引号、反引号(撇)包起来的都是字符串)
    • Boolean (布尔boolean true/false)
    • null (空对象指针null)
    • undefined (未定义undefined)

    引用数据类型

    • 对象数据类型object
      • {} 普通对象
      • [] 数组对象
      • /^[+-]?(\d|([1-9]\d+))(.\d+)?$/ 正则对象
      • Math数学函数对象
      • 日期对象
        ...
    • 函数数据类型function

    基本数据类型转Number

    Number(null) => 0
    Number(undefined) => NaN  // 不是一个数
    /* 只要字符串中包含任意一个非有效数字字符(第一个点除外)结果都是NaN,空字符串会变为数字零*/
    Number('12.5px') => NaN
    Number('12.5.5') => NaN
    

    引用数据类型转Number

    /* 把引用数据类型转换为数字,是先把他基于toString方法转换为字符串,然后在转换为数字 */
    console.log(Number({name:'10'}));//=>NaN
    console.log(Number({}));//=>NaN
    // {}/{xxx:'xxx'} .toString() => "[object Object]" => NaN
    console.log(Number([]));//=>0
    // [].toString() -> ''
    console.log(Number([12]));//=>12
    // [12].toString() -> '12'
    console.log(Number([12,23]));//=>NaN
    // [12,23].toString() -> '12,23' 
    

    Number() 与 parseInt()/parseFloat() 的区别?(把其他类型值转化为数字类型)

    • Number([val])
    • parseInt/parseFloat([val],[进制]):也是转换为数字的方法,对于字符串来说,它是从左到右依次查找有效数字字符,直到遇到非有效数字字符,停止查找(不管后面是否还有数字,都不在找了),把找到的当做数字返回
    • ==进行比较的时候,可能要出现把其它类型值转换为数字
    let str = '12.5px';
    console.log(Number(str)); //=>NaN
    console.log(parseInt(str)); //=>12
    console.log(parseFloat(str)); //=>12.5
    console.log(parseFloat('width:12.5px')); //=>NaN
    console.log(parseFloat("")); //=>NaN 因为没找到有效数字字符
    parseInt(undefined) ->parseInt('undefined') ->NaN
    

    把其它类型值转换为字符串

    • [val].toString()
    • 字符串拼接
    console.log((NaN).toString()); //=>'NaN' */
    // null和undefined是禁止直接toString的
    // (null).toString() //=>报错
    // 但是和undefined一样转换为字符串的结果就是 'null'/'undefined'
    
    /*普通对象.toString()的结果是 "[object Object]"  =>?  =>Object.prototype.toString方法不是转换为字符串的,而是用来检测数据类型的*/
    ({'name': 'guohongjun'}).toString(); //  => "[object Object]"
    ({}).toString();  //  =>  "[object Object]"
    

    把其它类型值转换为布尔类型

    只有 0、NaN、''、null、undefined 五个值转换为FALSE,其余都转换为TRUE(而且没有任何的特殊情况)

    • Boolean([val])
    • !/!!
    • 条件判断

    基本数据类型和引用数据类型的区别

    基本数据类型按值操作,引用类型操作的是堆内存的空间地址

    常用的关键字和保留字

    • 关键字
      • break
      • continue
      • if
      • else
      • for
      • var / let / const / function / class / import / export
      • instanceof
      • typeof
      • this
      • return
      • switch
      • case
      • do
      • while
      • delete
      • new
      • ...
    • 保留字
      • boolean
      • float
      • int
      • double
      • long
      • char
      • debugger
      • ...

    创建变量的方式

    • var / let 创建变量
    • const 创建常量
    • function 创建函数
    • class 创建类
    • import 模块导入

    console.log(alert(1))

    输出 "undefined"

      1. alert(1):执行浏览器内置的alert方法,执行方法的时候弹出一个"1"(方法的功能),此方法没有返回值(默认返回值undefined)
      1. console.log(undefined)

    i++/++i

    let i='10';
    i=i+1 =>'10'+1 =>'101'
    i+=1  =>'101'
    i++   =>i=11   i++和以上两种不完全一样,他是纯粹的数学运算
    

    arguments.callee

      /* 阶乘函数 */
    function factorial(num) {
    
        console.log(arguments);
    
        if(num<=1) {
            return 1;
        } else {
            return num * factorial(num - 1);
        }
    }
    

    此时如果执行下面的代码

    var anotherFactorial = factorial; 
    factorial = null;
    alert(anotherFactorial(4)); //出错!
    

    就会报错了 ,因为在接下来调用 anotherFactorial()时,由于必 须执行 factorial(),而 factorial 已经不再是函数,所以就会导致错误。在这种情况下,使用 argu- ments.callee 可以解决这个问题。arguments.callee 是一个指向正在执行的函数的指针,因此可以用它来实现对函数 的递归调用。

    function factorial(num) {
    
        console.log(arguments);
    
        if(num<=1) {
            return 1;
        } else {
            /* arguments.callee 指向正在执行的函数的指针 */
            return num * arguments.callee(num - 1);
        }
    }
    

    相关文章

      网友评论

          本文标题:js笔记

          本文链接:https://www.haomeiwen.com/subject/cflgwctx.html