js笔记

基本数据类型

  • 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笔记)