数据存储及数据类型

一、内存的栈和堆

  • 内存:计算机的运行空间
  • :保存的是类似于变量名(地址)
    • 空间小,稳定,不可被修改
    • 先进后出
  • :保存的是值
    • 空间大,可被修改
    • 先进先出
  • 栈和堆的关系:一对一,多对一,没有一对多

二、数据类型的分类

  • 值传递(基本数据)
    • 内存中,值就是地址,地址就是值
    • 拷贝的是值
  • 引用传递(负责数据)
    • 内存中,地址就是地址,值就是值
    • 拷贝的是地址

三、引用传递数据的拷贝方式

  • 浅拷贝:拷贝的是地址,修改新数据,会影响老数据
  • 深拷贝:拷贝的是值
    • 先创建一个新的空对象
    • 利用for-in遍历老对象,逐个拷贝老对象的属性到新对象
  • 基本类型(值传递的数据), 复制的就是值
  • 复杂类型(引用类型,引用传递的数据),复制的是地址,同一个地址,指向同一个值

四、数据类型

  • 基本分类
    • 字符(string):只要被引号包裹的数据:单引号’’,双引号"",反引号:``
    • 数值(number):0123456789,NaN
    • 布尔(boolean):true,false
    • 对象(object):{键:值,键:值}
    • 函数(function):function(){}
    • undefined(undefined):undefined,定义了,但未赋值
    • null(object):空,空指向,只有一个指针,但是没有指向任何数据,会被typeof检测出object
    • 数组(object):[数据,数据],会被typeof检测出object
    • symbol(symbol):类字符的数据 ***
  • 根据在内存中的存储形式分:
    • 基本类型:string,number,boolean,undefined,symbol,null
    • 复杂类型:object,function,array

五、数据类型的转换

  • 隐式类型转换 ——不主动转,运算过程中,自动转

    • 转换时机:运算过程中转换,没有影响原数据
    • 场景:某些运算符两边
    • 规则:
      • 字符转数值
        • 严格转换:整体转,有一个不能转,就得到NaN
          • “123”
          • “123a”
        • 非严格转换:从左向右检测,能转则转,不能转停止,第一位就不能转,直接NaN
          • “123”
          • “123a”
          • “123a456”
          • “a123”
      • 布尔转数值
        • true为1
        • false为0
      • 其他转布尔
        • 非空字符,为true
          • “”,’’,``
        • 非0为true
        • 对象都是true,{},[]
        • 函数都是true,function(){}
        • undefined和null和NaN都是false
  • 显示(强制)类型转换 —— 主动转

    • parseInt()
    //parseInt() - 非严格转换 整数
    var str = "123";
    var str1 = "123a";
    var str2 = "123a456";
    var str3 = "a123a456";
    var str4 = "123.456";
    var res = parseInt(str);
    var res1 = parseInt(str1);
    var res2 = parseInt(str2);
    var res3 = parseInt(str3);
    var res4 = parseInt(str4);
    console.log(res);//123
    console.log(str);//123
    console.log(res1);//123
    console.log(str1);//123a
    console.log(res2);//123
    console.log(str2);//123a456
    console.log(res3);//NaN
    console.log(str3);//a123a456
    console.log(res4);//123
    console.log(str4);//123.456
    
    • parseFloat()
    //parseFloat() - 非严格转换 可以识别小数点
    var str = "123";
    var str1 = "123a";
    var str2 = "123a456";
    var str3 = "a123a456";
    var str4 = "123.456";
    var res = parseFloat(str);
    var res1 = parseFloat(str1);
    var res2 = parseFloat(str2);
    var res3 = parseFloat(str3);
    var res4 = parseFloat(str4);
    console.log(res); //123
    console.log(str); //123
    console.log(res1); //123
    console.log(str1); //123a
    console.log(res2); //123
    console.log(str2); //123a456
    console.log(res3); //NaN
    console.log(str3); //a123a456
    console.log(res4); //123.456
    console.log(str4); //123.456
    
    • Number()
    // Number() - 严格转换,可以识别小数点
    var str = "123";
    var str1 = "123a";
    var str2 = "123a456";
    var str3 = "a123a456";
    var str4 = "123.456";
    var res = Number(str);
    var res1 = Number(str1);
    var res2 = Number(str2);
    var res3 = Number(str3);
    var res4 = Number(str4);
    console.log(res); //123
    console.log(str); //123
    console.log(res1); //NaN
    console.log(str1); //123a
    console.log(res2); //NaN
    console.log(str2); //123a456
    console.log(res3); //NaN
    console.log(str3); //a123a456
    console.log(res4); //123.456
    console.log(str4); //123.456
    
    • Math.round()
    //Math.round() - 严格转换,可以是被小数点,但是会取整,四舍五入
    var str = "123";
    var str1 = "123a";
    var str2 = "123a456";
    var str3 = "123.567";
    var str4 = "123.456";
    var res = Math.round(str);
    var res1 = Math.round(str1);
    var res2 = Math.round(str2);
    var res3 = Math.round(str3);
    var res4 = Math.round(str4);
    console.log(res); //123
    console.log(str); //123
    console.log(res1); //NaN
    console.log(str1); //123a
    console.log(res2); //NaN
    console.log(str2); //123a456
    console.log(res3); //124
    console.log(str3); //123.567
    console.log(res4); //123
    console.log(str4); //123.456
    
    • xxx.toString()
    //xxx.toString()数值型数据转字符型数据
    var num = 123.456;
    var res = num.toString();
    console.log(res);//"123.456"
    console.log(num);//123.456
    
    • xxx.toFixed()
    // xxx.toFixed()数值型数据转字符型数据,可设置保留多少位的小数
    var num = 123.456;
    var res = num.toFixed(2);
    console.log(res);//123.46
    console.log(num);//123.456
    
    • Boolean()
    //Boolean()布尔类型的转换
    console.log(Boolean(" ")); // true
    console.log(Boolean("false")); // true
    console.log(Boolean("")); // false
    console.log(Boolean("0")); // true
    
    console.log(Boolean(0)); // false
    console.log(Boolean(-1)); // true
    console.log(Boolean(1)); // true
    
    console.log(Boolean({})); // true
    console.log(Boolean([])); // true
    console.log(Boolean(function() {})); // true
    
    console.log(Boolean(undefined)); // false
    console.log(Boolean(null)); // false
    console.log(Boolean(NaN)); // false
    

六、JS中的一些关键字

  • 关键字

break----delete----function----return----typeof----case----do
if----switch----var----catch----else----in----this---- finally
void---- continue----false----instanceof----throw----while----debugger
new----true----with----default----for----null----try

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值