js笔记

2019-12-05  本文已影响0人  张东山

基本数据类型

引用数据类型

基本数据类型转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() 的区别?(把其他类型值转化为数字类型)

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

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

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(而且没有任何的特殊情况)

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

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

常用的关键字和保留字

创建变量的方式

console.log(alert(1))

输出 "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);
    }
}
上一篇下一篇

猜你喜欢

热点阅读