Javascript 基础数据类型

2.1 两种数据类型概念

  • 基础类型

    • 原始类型(基础类型)数据保存在栈内存里
    • 包括:Number、String、Boolean、Undefined、Null、Symbol
  • 复杂类型

    • 复杂类型(引用类型)数据保存在堆内存里,通常内存占据空间较大,存放的是地址。

    • 包括:对象{},数组[]、函数(){}

2.2 基础类型数据-Number

  • 声明定义

    js 复制代码
    // 字面量声明
    var num = 1;
    console.log(typeof num)		// number
    
    // 数字对象方式声明
    var num = new Number(2);
    console.log(num + 3)	// 5
  • 数字方法

    • 整数判断

      js 复制代码
      console.log(Number.isInteger(1.3))	// false
    • 指定返回的小数位数

      js 复制代码
      console.log((12.345).toFixed(2))	// 12.35
  • NaN - 表示非数字值

    js 复制代码
    var a = '123';
    console.log(Number(a));		// 123
    console.log(isNaN(a));		// false
    
    var b = 'asdf'
    console.log(Number(b));		// NaN
    console.log(isNaN(b))		// true

    注意null""两个值会被判断为数字,所以使用前应该屏蔽

    js 复制代码
    var a = '';
    console.log(Number(a));		// 0
    console.log(isNaN(a));		// false
    
    var b = null
    console.log(Number(b));		// 0
    console.log(isNaN(b))		// false
  • 浮点精度

    • js语言在浮点数计算时会有精度误差问题

      js 复制代码
      var a = 0.1 + 0.2
      console.log(a)		// 0.30000000000000004
    • 解决方式

      js 复制代码
      var a = 0.1 + 0.2
      console.log(a.toFixed(1))	// 0.3

2.3 基础类型数据 - String

  • 声明定义

    js 复制代码
    // 字面量声明
    var name = '小帅'		// 可以使用单引号或者双引号
    
    // 字符串对象方式声明
    var name = new String('小帅')
  • (常用)字符串方法

    js 复制代码
    // 连接运算符
    var address = 'csdn.net'
    name = 'CSDN'
    console.log(name + '网址为' + address)		// CSDN网址为csdn.net
    
    // 获取长度
    console.log('csdn.net'.length)	// 8
    
    // 大小写长度
    console.log('csdn.net'.toUpperCase())	// CSDN.NET
    console.log('CSDN.NET'.toLowerCase())	// csdn.net
    
    // 移除空白
    var str = '   csdn.net   '
    console.log(str.length)		// 14
    console.log(str.trim().length)
    
    // 获取单字符
    console.log('csdn.net'.charAt(3))	// n
    console.log('csdn,net'[3])	// n
    
    // 截取字符串
    var n = 'csdn.net'.slice(1, 5)	// 左闭右开
    console.log(n)	// sdn.
    
    // 查找字符串
    console.log('csdn.nets'.indexOf('s'))	// 1
    console.log('csdn.nets'.indexOf('s', 6))	// 8 从第六个字符开始搜索
    
    // 替换字符串
    var name = 'CSDN教育机构'
    var changeName = name.replace('机构', '课堂')
    console.log(changeName)		// CSDN教育课堂
    
    // 类型转换(将'2022-01-22'时间格式转换为'2022/01/22')
    var time = '2022-01-22'
    console.log(name.split('-'))	// ['2022', '01', '22']
    
    var a = name.split('-')
    console.log(a.join('/'))	// 2022/01/22

2.4 基础类型数据 - Boolean

  • 声明定义

    js 复制代码
    // 字面量声明
    var a = true
  • 隐式转换

    几乎所有的类型都可以隐式转换为Boolean类型

    基础类型 true false
    String 非空字符串 空字符串
    Number 非0的数值 0/NaN
    Array 数组不参与比较时 参与比较的空数组
    Object
    undefined
    null
    NaN
    js 复制代码
    // String
    console.log(Boolean('123'))		// true
    console.log(Boolean(''));		// false
    
    // Number
    console.log(Boolean(1))		// true
    console.log(Boolean(NaN));	// false
    
    // Array
    var list1 = [];
    var list2 = [1, 2]
    console.log(Boolean(list1))		// true
    console.log(Boolean(list2))		// true
    console.log(list2 == true)		// false

    当其他类型与Boolean类型对比时,会将其他类型先转换为数值类型再对比

    js 复制代码
    console.log(Number('123'));		// 123
    console.log('123' == true);		// false
    console.log('1' == true);		// true
    
    console.log(Number([]));		// 0
    console.log([] == true);		// false
  • 显式转换

    js 复制代码
    var a = ''
    console.log(!!a)	// false
    
    a = 0
    console.log(!!a)	// false
    
    a = null
    console.log(!!a)	// false
    
    a = 1
    console.log(!!a)	// true

2.5 基础数据类型 - Undefined、Null、Symbol

  • Undefined/Null

    • Null和Undefined基本是同义的

      js 复制代码
      undefined == null	// true

      null 是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。

      js 复制代码
      console.log(Number(null))	// 0
      console.log(Number(undefined))	//NaN
      console.log(5 + undefined)		//NaN
    • Undefined

      js 复制代码
      // 变量被声明了,但没有赋值时,就等于undefined
      var i
      console.log(i)		// undefined
      
      // 对象没有赋值的属性,该属性的值为undefined
      var o = new Obeject()
      console.log(o.p)	// undefined
      
      // 函数没有返回值时,默认返回undefined
      function test(){}
      console.log(test())		// undefined
    • Null

      js 复制代码
      null 	// 表示"没有对象", 即此处不该有值
      用法:
      (1) 作为函数的参数,表示该函数的参数不是对象
      (2) 作为对象原型链的终点
       Object.getPrototypeOf(Object.prototype) // null
  • Symbol(es6的语法)

    • Symbol('name')生成唯一属性

      js 复制代码
      // 在一个对象中需要增加一个相同的属性名
      var xs = {aa : '1'}
      var aa = Symbol('aa')
      xs[aa] = 2
      console.log(xs)
相关推荐
为美好的生活献上中指28 分钟前
java每日精进 5.11【WebSocket】
java·javascript·css·网络·sql·websocket·网络协议
拖孩2 小时前
【Nova UI】十五、打造组件库之滚动条组件(上):滚动条组件的起步与进阶
前端·javascript·css·vue.js·ui组件库
苹果电脑的鑫鑫2 小时前
element中表格文字剧中可以使用的属性
javascript·vue.js·elementui
一丝晨光3 小时前
数值溢出保护?数值溢出应该是多少?Swift如何让整数计算溢出不抛出异常?类型最大值和最小值?
java·javascript·c++·rust·go·c·swift
Wannaer3 小时前
从 Vue3 回望 Vue2:响应式的内核革命
前端·javascript·vue.js
懒羊羊我小弟3 小时前
手写符合Promise/A+规范的Promise类
前端·javascript
赵大仁4 小时前
React vs Vue:点击外部事件处理的对比与实现
javascript·vue.js·react.js
肥肥呀呀呀5 小时前
在Flutter上如何实现按钮的拖拽效果
前端·javascript·flutter
付朝鲜6 小时前
用自写的jQuery库+Ajax实现了省市联动
java·前端·javascript·ajax·jquery
coderYYY6 小时前
多个el-form-item两列布局排齐且el-select/el-input组件宽度撑满
前端·javascript·vue.js·elementui·前端框架