数据类型

141 阅读7分钟

**问题:**计算机程序可以处理大量的数据,为什么要给数据分类?

  1. 更加充分和高效的利用内存

  2. 也更加方便程序员的使用数据

简单数据类型/基本数据类型/值类型(包装数据类型)

介绍:简单数据类型/基本数据类型,在存储时变量中==存储的是值本身==,因此叫做值类型

问题:简单数据类型为什么会有属性和方法?

答:因为简单数据类型在声明的时候,其实是在JS底层就把基本数据类型包装成了复杂数据类型

const str = 'pink'
console.log(str.length)
相当于
function Object(length,.......) {
	this.length = length
}
const str = new Object('pink')  pink其实是当做一个实参传入到了构造函数里,并且js内部已经声明好了length这个属性

**基本数据类型有:**number数字型,string字符型,boolean布尔型,undefined未定义型,null空类型

注意:JS 是弱数据类型,变量到底属于那种类型,只有赋值之后,才能确认数据类型

number数字型

包括:整数、小数、正数、负数

let num = 2   // 2 的数据类型就是数字型

NaN

介绍:NaN 代表计算错误。它是一个不正确的或者一个未定义的数学操作所得到的结果

出现情况:

console.log('老师'-2)  / 输出为NaN

注意:==NaN不等于任何数,包括他自己(NaN不等于NaN),任何数加NaN都是NaN==

toFixed保留两位小数

语法:数字型.toFixed(保留小数的个数)

const num = 8.246
console.log(num.toFixed(2))  四舍五入保留两位小数 8.25
------------------------------------------------------
const num = 8
console.log(num.toFixed(2))  8.00

string字符型

介绍:通过单引号'' 、双引号 "或反引号 包裹的数据都叫字符串,推荐使用单引号

let uname = '小明'  字符串类型
let uname = "小明"  字符串类型
let uname = `小明`  字符串类型
let num = '123456'  字符串类型
let num = ''  空字符串

注意:

  1. 无论单引号或是双引号必须成对使用

  2. 单引号/双引号可以互相嵌套,但是不以自已嵌套自已(口诀:外双内单,或者外单内双

  3. 必要时可以使用转义符 \,输出单引号或双引号

字符串拼接

介绍: + 运算符 可以实现字符串的拼接

口诀:数字相加,字符相连

技巧:引引加加

console.log(1 + 1)   /输出为 2
console.log('pink' + '老师')  / 输出为pink老师
document.write('我今年' + age + '岁了')

模板字符串

介绍:拼接字符串和变量

语法: `` ${变量 }

document.write(`大家好,我叫${uname}, 我今年贵庚${age}岁了`)

split字符串转数组

介绍:split() 方法使用指定的分隔符字符串将一个String对象分割成子字符串数组,以一个指定的分割字串来决定每个拆分的位置

语法:字符串.split('分隔符号')

const str = 'pink,red'
const arr = str.split(',') 分隔符号为  字符串中的 ,
console.log(arr)   ['pink','red']
--------------------------------------
const time = '2022/12/15'
const timeArr = time.split('/')  分隔符为 字符串中的 /
console.log(timeArr)  [2022,12,15]

字符串小写英文字母转为大写

语法:字符串.toUpperCase()

const str = 'app'
console.log(str.toUpperCase())  // APP

replace 字符串替换

**使用场景:**替换敏感词

语法:字符串.replace(/正则表达式(替换的内容)/,'被替换的文本')

const str = '我要去北京'
const re = str.replace(/北京/,'上海')   
console.log(re)   这里不要直接输出str,要输出替换的返回值

substring 字符串截取

介绍:用于截取字符串中的某一段文字

语法:字符串.substring(开始的索引号,结束的索引号)

             0 1 2 3 4 5 6 7
const str = '我要必须学会前端'
1.得到字符串中的  必须
console.log(str.substring(2,4))  //必须
----------------------------------------
2.如果 不写第二个参数 默认截取到最后
console.log(str.substring(2))  //必须学会前端

slice字符串截取

**介绍:**用于截取字符串中的某一段文字

**返回值:**包含提取的字符串部分的新字符串。

语法:字符串.slice(从索引号几开始,从索引号几结束)

**参数:**可以用负索引号,表示截取倒数几个字

const str = '我必须学会前端'
str.slice(1) // 必须学会前端

charAt()截取指定字符

**介绍:**用于从一个字符串中返回指定字符

语法:字符串.charAt(索引号)

const str = '字符串截取'
console.log(str.charAt(0)) // 字

startswith检测以谁开头

语法:字符串.startswith(要检测的内容,从第几个开始检测)

const str = '敲代码是一件快乐的事情'
1.第二个参数如果省略,默认从第0个开始检测
console.log(str.startswith('敲代码'))   true
2.检测快乐的位置是否在索引号 6 的位置
console.log(str.startsWith('快乐', 6))  true
console.log(str.startsWith('快乐'))     false

includes判断字符串里有没有规定的字符

语法:字符串.includes(要检测的内容,从第几个开始检测)

const str = '敲代码是一件快乐的事情'
1.第二个参数如果省略,则表示只要字符串中有就为true
console.log(str.includes('快乐'))   true
2.检测快乐的位置是否在索引号 6 的位置
console.log(str.includes('快乐', 5))  false

注意:区分大小写

boolean布尔型

介绍:表示肯定或否定时在计算机中对应的是布尔类型数据

语法:true真 false假

console.log(3 > 4)  / false
console.log(3 < 4)  / true

undefined未定义型

let i
console.log(i)  //undefined

==只声明不赋值,输出为undefined==

null空类型

介绍:JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值 ,

==简单理解null这个空的盒子,盒子里装着谁就是谁的数据类型,如果谁也不装,数据类型就是null==

使用场景:用于销毁变量,或者可以声明空对象

consle.log(null + 1) // 1  null代表0
const obj = null 相当于 const obj = {}

计算区别:

console.log(undefined + 1)  // NaN
console.log(null + 1) // 1
console.log(null + NaN) // NaN

复杂数据类型/引用数据类型

介绍:复杂数据类型,在存储时变量中==存储的仅仅是地址==(引用),因此叫做引用数据类型,他通过new关键字创建的对象(系统对象、自定义对象)

复杂数据类型有:function(函数)、Array(数组)、Object(对象)、Data(时间对象)、Math(数学对象)

堆和栈

栈:由操作系统自动分配释放存放函数的参数值、局部变量的值等。==简单数据类型存放到栈里面==

堆:存储复杂类型,一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收==引用数据类型存放到堆里面==

注意:堆里存放引用数据类型的数据,栈里面存的是引用数据类型的地址

typeof检测数据类型

语法:typeof num

let str = '哈哈'
document.write(typeof str)  /输出为 string
document.write(typeof 1)  /输出为 number
document.write(typeof true) /输出为 boolean

数据类型转换

介绍:把一种数据类型的变量转换成我们需要的数据类型

隐式转换

介绍:某些运算符被执行时,系统内部自动将数据类型进行转换,这种转换称为隐式转换

特点:

  • +号两边只要有一个是字符串,都会把另外一个转成字符串

    console.log('' + 1) 输出为 字符串类型的 1
    ----------------------------------------
    console.log(1 + '5') 输出为 字符串类型的 6
    
  • +以外的算术运算符等都会把 数据 转成 数字类型

    console.log(8 - '5')  输出为 数字型的 3
    ------------------------------------------
    console.log('3' * '9')  输出为 数字型的 27
    
  • null 经过数字转换之后会变为 0

    console.log(null + 8) 输出为 数字型的 8
    ---------------------------------------------
    console.log(null + '8')  输出为 字符串的 null8
    ----------------------------------------------
    console.log(null - '8')  输出为 数字型的  -8
    
  • undefined 经过数字转换之后会变为 NaN

console.log(undefined + 1)  输出为 NaN
-------------------------------------
console.log(NaN + 1) 输出为 NaN

+号==前置单独使用==可以把字符串型转换为数字型(例:+'12'为数字型12 、+'12' + 11为数字型23)

==拼接字符串==的+号可以把数字型转换为字符串型

显示转换

转换为数字型

转换方式说明
Number(数据)转成数字类型
parseInt(数据)只保留整数
parseFloat(数据)可以保留小数

转换为数字型方法2:(隐式转换)==利用+号==

	<script>
        let num = +prompt('输入年薪')
		console.log(num)
    </script>

转换为字符型

语法:String(数据) / 变量.toString(进制)

let num = 20
console.log(String(num))   /字符型的 20

注意:首字母大写