js数据类型?基本和引⽤的区别?symbol和bigint应⽤场景?基本类型    字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、Symbol ( ES6 引⼊了⼀种新的原始数据类型,表⽰独⼀⽆⼆的值。)
Bigint (⽐Number数据类型⽀持的范围更⼤的整数值)
引⽤数据类型  对象(Object)(JS中除了基本类型以外都是对象,数组,函数,正则表达式)
Undefined: 这个值表⽰变量不含有值
出现undefined的情况有以下⼏种
1、预编译阶段,进⾏变量提升时,只声明,未定义,变量值为undefined;
2、函数⽆return,或者return后什么也没有时,默认返回值为undefined;
js正则表达式判断数字
3、函数定义的参数未传值时,默认为undefined;
4、查到⼀个对象不存在的属性时,返回undefined;
5、数组find⽅法中,没到时,返回为undefined。
Null:将变量的值设置为 null 来清空变量
出现null的情况:
未获取到指定的dom元素对象时,返回为null;
Object.prototype.proto 值为null;
正则捕获,⽆结果时,返回为null。
typeof null 返回的值是 object,但是null不是对象
Boolean:true和false
Number: js中没有浮点数和整数的区别都是number
浮点数:计算会产⽣误差
+Infinity:超出范围的值,正⽆穷,如: 1/0,返回 Infinity。不能参与计算
-Infinity:超出范围的值,负⽆穷,如: -1/0,返回 -Infinity。不能参与计算
isFinite( ):判断是否有穷值,在范围内的数值返回 true
NaN:特殊数值,⾮数值,⽤来表⽰本应返回数值的操作数未返回数值的情况,如:零除以零,返回
NaN。特点:1. 任何涉及NaN的操作都返回NaN;2. NaN与任何值都不相等,包括⾃⼰本⾝。
isNaN( ):判断参数是否不是数值,函数在接收到参数后,会先尝试将参数转成数值型,不能转成数值的参数会返回true;转成数值的部分,如果参数是NaN则返回true
数值转换
Number():将任何类型参数转成数值
String
获取字符串长度时, string.length空格算1个字符,多个字符的转义序列算⼀个字符。
toString()⽅法:转成字符型,数值、布尔值、对象和字符串都有该⽅法,null和undefined没有该⽅法,使⽤该⽅法会报错。对于数字的的转换,默认采⽤⼗进制,toString⽅法可以接受⼀个参数,来指定转换数字采⽤的进制类型。
String(arg)⽅法:转成字符型,如果参数有toString()⽅法,则返回对应结果,如果null则返回null,undefined返回undefined。
toLowerCase()⽅法:转成⼩写
toLocaleLowerCase()⽅法:转成⼩写,针对特定地区
toUpperCase()⽅法:转成⼤写
toLocaleUpperCase()⽅法:转成⼤写,针对特定地区
Symbol 表⽰独⼀⽆⼆的值。
let s = Symbol()
typeof s  "symbol"
let s1 = Symbol('foo');
let s2 = Symbol('bar');
s1 // Symbol(foo)
s2 // Symbol(bar)
// 没有参数的情况
let s1 = Symbol();
let s2 = Symbol();
s1 === s2 // false
/
/ 有参数的情况
let s1 = Symbol('foo1');
let s2 = Symbol('foo1');
s1 === s2 // false  s1和s2都是Symbol函数的返回值,⽽且参数相同,但是它们是不相等的。
//Symbol 值不能与其他类型的值进⾏运算,会报错。
let sym = Symbol('Yr symbol');
"your symbol is " + sym
// TypeError: can't convert symbol to string
Symbol 值可以显式转为字符串。布尔值 但是不能转为number
symbol作为对象的属性是不能⽤for in 和Object.keys()来枚举的。JSON.stringify()将对象转换成JSON字符串的时候,Symbol属性也会被排除在输出内容之外:
let obj = {
[Symbol('name')]: 'yr',
age: 18,
desc: '⼤⽩菜'
}
Object.keys(obj)  // ['age', 'desc']
for (let p in obj) {
console.log(p)  // 输出:'age' 和 'desc'
}
JSON.stringify(obj)  // {"age":18,"desc":"⼤⽩菜"}
更多详细具体的看阮⼀峰⽼师的
使⽤场景:
使⽤Symbol来作为对象属性名(key)  利⽤该特性,把⼀些不需要对外操作和访问的属性使⽤Symbol来定义
// 使⽤Object的API
// 使⽤新增的反射API
Reflect.ownKeys(obj) // [Symbol(name), 'age', 'desc']
使⽤Symbol定义类的私有属性和⽅法
Symbol常量pwd被定义在a.js所在的模块中,外⾯的模块获取不到这个Symbol,也不可能再创建⼀个⼀模⼀样的Symbol出来(因为Symbol是唯⼀的),因此这个pwd的Symbol只能被限制在a.js内部使⽤,
所以使⽤它来定义的类属性是没有办法被模块外访问到的,达到了⼀个私有化的效果
const pwd= Symbol()
class Login {
constructor(username, pwd) {
this.username = username
this[pwd] = pwd
}
checkPassword(pwd) {
return this[pwd] === pwd
}
}
export default Login
import Login from './a'
const login = new Login('admin1', '111111')
login.checkPassword('123456')  // true
login.pwd// oh!no!
login[pwd] // oh!no!
login["pwd"] // oh!no!
BigInt是⼀种内置对象,它提供了⼀种⽅法来表⽰⼤于 253 - 1 的整数。这原本是 Javascript中可以⽤  表⽰的最⼤数字。BigInt 可以表⽰任意⼤的整数。
const theBiggestInt = 9007199254740991n;
const alsoHuge = BigInt(9007199254740991);
// ↪ 9007199254740991n
不能⽤于  对象中的⽅法;不能和任何  实例混合运算,两者必须转换成同⼀种类型。在两种类型来回转换时要⼩⼼,因为 BigInt 变量在转换成  变量时可能会丢失精度。
当使⽤ BigInt 时,带⼩数的运算会被取整。
const expected = 4n / 2n;
// ↪ 2n
const rounded = 5n / 2n;
// ↪ 2n, not 2.5n
BigInt 在需要转换成  的时表现跟  类似
0n || 12n
// ↪ 12n
0n && 12n
// ↪ 0n
Boolean(0n)
// ↪ false
Boolean(12n)
// ↪ true
!12n
// ↪ false
!0n
// ↪ true
使⽤场景:由于在  与 BigInt 之间进⾏转换会损失精度,因⽽建议仅在值可能⼤于253 时使⽤ BigInt 类型,并且不在两种类型之间进⾏相互转换。
JS 中的Number类型只能安全地表⽰-9007199254740991 (-(2^53-1)) 和9007199254740991(2^53-1)之间的整数,任何超出此范围的整数值都可能失去精度。意外四舍五⼊会损害程序的可靠性和安全性。
为了解决这些限制,会使⽤字符串类型表⽰⼤整数。还有就是使⽤bigint
更为详细具体的BigInt
基本类型与引⽤类型的区别参考(以及引⽤类型的深浅拷贝问题)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。