zoukankan      html  css  js  c++  java
  • 基本数据类型和引入数据类型

    NaN

    NaN 属于 number 类型,和任何值,包括自己都不相等

    isNaN

    检测一个值是否为有效数字。如果不是有效数字返回 true,是有效数字返回 false

    isNaN("10"); //false
    

    如果不是数字类型,会用number()方法转换

    把其他类型转换为数字类型

    Number("12.5"); //12.5
    Number("12.5px"); //NaN
    Number(""); //0
    Number(" "); //0
    Number(true); //1
    Number(false); //0
    Number(null); //0
    Number(undefined); //NaN
    // 引用类型转换为数字,先基于toString()方法转换为字符串,然后再转换为数字
    Number({}); //NaN
    Number([]); //0
    Number([12]); //12
    Number([12, 13]); //NaN
    
    //toString
    {}.toString()  //  '[object object]'
    [].toString()  //  ''
    [12].toString()   // '12'
    [12,13].toString()  // '12,13'
    

    特别需要注意的是

    • Number(""); // 0
    • Number(" "); // 0
    • Number(null); // 0
    • Number("12.5px"); // NaN
    • Number(undefined); // NaN
    • Number({}); // NaN
    • Number([]); // 0
    • [].toString() // ''

    把其他类型转换为字符串

    toString()

    • 数组
      [1,2].toString() // '1,2' [].toString() // '' 这个是要注意的

    • 对象
      {}.toString() // '[object object]'

    • NaN
      NaN.toString() // 'NaN'

    • null和undefined
      null和undefined没有这个方法

    字符串拼接

    "10px" - 10; //NaN
    10 + null + true + [] + null; //'11null'
    

    false

    • 0
    • false
    • null
    • undefined
    • NaN

    ' '有空格的字符串是true

    null 和 undefined

    var a = null;
    在栈内存中的值存储空间,什么都不做。只是在变量存储空间存了一个变量 a。
    var a = undefined;
    在栈内存中的变量存储空间存了一个变量 a,在值存储空间区域,开了一块内存,但是里面什么都没存

    堆栈内存

    浏览器执行 js 代码,从电脑内存中分配出一块内存,用来执行代码,这块内存就是栈内存。 在栈内存中,有一个变量存储空间,有一个值存储空间,还有一个主线程空间
    变量存储空间用来存储变量值存储空间用来存储基本数据类型引用数据类型的地址
    主线程用来执行代码,遵循先进先出的原则, 第一行代码进栈执行,执行完出栈,接着第二行代码进栈执行。

    var a = 2;
    var b = a;
    a = 3;
    
    1. 创建变量 a,放到当前栈内存变量存储空间
    2. 创建值 2,存储到当前栈内存值存储空间
    3. =赋值,让变量和值相互关联
    4. 创建变量 b,也和 a 一样指向 2
    5. 创建一个新值 3,存储到当前栈内存值存储空间中,a 指向新值
    var a = {
        name: "djh",
    };
    var b = a;
    b.name = "ddd";
    
    1. 创建变量 a,放到当前栈内存变量存储空间
    2. 内存中新开辟一块内存(堆内存),用来存储引用类型值
    3. 值存储空间中存放堆内存地址
    4. 变量 a 指向堆内存地址(关联)
    5. 创建变量 b,也和 a 一样指向那块堆内存地址
    var a = { n: 1 };
    var b = a;
    a.x = x = { n: 2 };
    console.log(a.x);
    console.log(b);
    

    引用数据类型,都是地址存在栈内存的值存储空间,真正的内容存在堆内存中
    函数比较特别
    函数存在堆内存中的是字符串,真正执行函数的时候,才会去栈内存新开辟一块内存,遵循先进先出的原则执行

  • 相关阅读:
    基于比较的算法之五:堆排序
    顺序统计:寻找序列中第k小的数
    顺序统计:寻找序列中的最大最小数
    非基于比较的排序算法之一:计数排序
    基于比较的算法之四:快速排序
    基于比较的算法之三:插入排序
    基于比较的算法之二:选择排序
    基于比较的算法之一:冒泡排序
    轮廓问题/Outline Problem-->改进的算法及时间复杂度分析
    寻找最大连续子序列/Find the max contiguous subsequence
  • 原文地址:https://www.cnblogs.com/flyerya/p/13950557.html
Copyright © 2011-2022 走看看