JS基本类型

数据类型

为什么需要有数据类型?

每一种编程语言都有自己的语法规则,在处理数据的时候,也会有自己的规则,不是任何数据都可以处理的。

数据类型分类

 1.值类型:存储于栈内存中  (基本数据类型)
    1)布尔 (Boolean)               5)大整数(Bigint)  (ES2020引入)
    2) 空(Null)                    6)字符串(String)
    3)未定义(undenfinde)           7)独一无二的值(Symbol)    (ES6新增)
    4)数字(Number)    
  
 2.复杂数据类型:存储在栈+堆内存  (引用数据类型)
    1)对象(Object)                 3)正则(RegExp)
    2)数组(Arry)                   4)日期(Date)

基本数据类型:占据空间小,大小固定;
引用数据类型:占据空间大,大小不固定。

typeof-检查数据类型

语法:typeof 数据 & typeof (数据)
结果:得到一个字符串来告诉你是什么类型

<script>
   console.log( typeof 123 )//'number'
   console.log( typeof '123' )//'string'
   console.log( typeof true )//'boolean'
   console.log( typeof undefined )//'undefined'
   console.log( typeof null )//'object'
</script>   

数据类型转换-转化为布尔类型

语法:Boolean (数据)
结果:
1.false(七种数据会得到false): 0 -0 NaN ’ ’ undefined null false
2.true: 除 false 7种之外的其他数据

隐式转换

当运算符两边‘数据类型不一致时,编译器会转成一致后运算。
1.转换数字:算数运算符 + - * / %
2.转换字符串:连接符 +
3.转换布尔:逻辑非 !

Number-特殊值

1.Infinity:正无穷大。-Infinity:负无穷大。
2.Infinity依然是一个数字,我们可以在控制台用typeof来测试。
3.由于内存的限制,number有最大值和最小值,其中最大值保存在Number.MAX_VALUE中,最小值保存在Number.MIN_VALUE中。

等于操作符 ==

等于操作符用两个等于号(==)表示,如果操作数相等,则返回 true。

如果任一操作数是布尔值,则将其转焕为数值在比较是否相等

let result1 = (true == 1);//true

如果任一操作数是字符串,另一操作数是数值,则尝试将字符串转换为数值,在比较是否相等

let result1 = ('55' == 55);//true

全等操作符 ===

全等操作符由三个等于号(===)表示,只有操作符在不转换的前提下相等才返回 true。即类型相等,值也需相等

let result1 = ('55' === 55);//false
let result2 = (55 === 55);//true

undefined 和null 与自身严格相等

let result1 = (null === null);//true
let result2 = (undefined  === undefined );//true

相关面试题解答

JavaScript中的堆栈
堆是动态分配内存,内存大小不一,也不会自动释放。
栈是自动分配相对固定大小的内存空间,并由系统自动释放。

栈内存中存放的是存储对象的地址,而堆内存中存放的是存储对象的值。

ES6的新特性

一、新的数据类型和变量声明
新的数据类型:symbol 每个symbol类型值都是独一无二的,即使传递的是相同的字符串。
两个声明变量的关键字:let和const。
解构赋值:对赋值运算符的扩展。
二、新的对象和方法
1.Map和Set:
1).Map对象用于保存键值对,任何值JavaScript支持的值都可以作为一个键或者一个值。
2).Set对象和Map对象类似,但它是用来存储一组唯一值的,而不是键值对。类似数组,但它的每个元素都是唯一的。
2.对象新特性:
创建对象的字面量方式可以更加简洁。直接使用变量名作为属性,函数体作为方法,最终变量值变成属性值,函数名变成方法名。
3.两个方法assign和is。
1).assign用于浅拷贝源对象可枚举属性到目标对象。
2).is方法和(===)功能基本类似,用于判断两个值是否绝对相等。
三、函数
1,参数默认值
ES6首次添加了参数默认值。我们再也不用在函数内部编写容错代码了。
2,箭头函数
书写方式:参数 => 函数体。
箭头函数实现了一种更加简洁的书写方式,并且也解决了关键字声明方式的一些麻烦事儿。

JS中的String常见方法

1.length

检测字符串的长度

2.slice()

截取指定位置的字符串
参数1:开始截取的位置,下标
参数2: 选填,若不填,则截取到最后。若传入要截止的下标,则截取从开始的下标到截止的下标中间的部分
若参数为负值,则从该字符串的末尾部分数
返回值: 为截取中的内容(前包后不包), 不会改变原字符串

3.substr

参数1: 开始截取字符串的下标
参数2: length长度,要截取字符的长度
若参数为负值,则从该字符串的末尾部分数
返回值: 为截取中的内容, 不会改变原字符串

4.substring

参数1:要截取字符的开始下标
参数2:可选,要截止的下标,若不传则会截取到末尾
返回值: 为截取中的内容(前包后不包)跟slice一样, 不会改变原字符串
注意:不能传入负值,从字符串末尾截取

5.split

将字符串按指定字符,把一个字符串分割成数组
参数1: 字符串中的字符,以这个字符为界限分割成数组
参数2:可选,若不传,则会将这个字符串按情况分割成数组,数组长度没限制。传入则限制数组的长度,
若分割成的数组大于指定的长度,则多余的项会省略返回值:分割后的数组,不包括指定字符本身
注意:
如果指定的字符串为空,则会截取字符串每个都分割开
可以使用正则代替指定的那个字符串

6.indexOf()

检测指定字符首次出现的位置下标
参数1: 指定的字符
参数2:可选,从那个位置开始下标
返回值:若存在返回当前字符的下标,否则返回-1
注意:对大小写敏感

null和undefined区别

1.首先是数据类型不一样

console.log(typeof null) // object
console.log(typeof undefined) // undefined

2.null和undefined 两者相等,但是当两者做全等比较时,两者又不等。

console.log(null == undefined) // true
console.log(null === undefined) // false

3.转化成数字的值不同

console.log(Number(null)) // 0
console.log(Number(undefined)) // NaN
console.log(22+null) // 22
console.log(22+undefined) // NaN

4.null代表"空",代表空指针;undefined是定义了没有赋值

var a;
console.log(a); // undefined

var b=null;
console.log(b) // null
严格模式

1.严格模式是什么

严格模式是采用具有限制性JavaScript变体的一种方式,从而使代码隐式地脱离“马虎模式/稀松模式/懒散模式“(sloppy)模式。

2.严格模式的特点

1.严格模式通过抛出错误来消除了一些原有静默错误。
2. 严格模式修复了一些导致 JavaScript引擎难以执行优化的缺陷:有时候, 相同的代码,严格模式可以比非严格模式下运行得更快。
3.严格模式禁用了在ECMAScript的未来版本中可能会定义的一些语法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值