数据类型分类(一)
(一) 什么是基本数据类型和引用数据类型
1、值类型操作(基本数据)
var a=12;
/*
var a=12;分成三步:
1.先声明一个变量a,没有赋值(默认值是undefined)
2、在当前作用域中开辟一个位置存储12这个值
3、让变量a和12关联在一起(定义:赋值)
*/
var b=a;
b=13;
console.log(a);
2、引用类型操作的是空间地址(引用数据)
var ary1=[12,23];
var ary2=ary1;
ary2.push(100);
console.log(ary1);
(1)需求:任意数求和
function sum(){
var total=null;
for (var i=0;i<arguments.length;i++){
var item=arguments[i];
item=parseFloat(item);
!isNaN(item)?total+=item:null;
}
return total;
}
(二)基本和引用的区别
JS是运行在浏览器中的(内核引擎),浏览器会为JS提供赖以生存的环境(提供给JS代码执行的环境)=>
全局作用域window(前端),global(后端)
var a=12;
var b=a;
b=13;
console.log(a);
var n={name:'hello'};
var m=n;
m.name='world';
console.log(n.name);
基本数据类型是按值操作的
:基本数据类型再赋值的时候,是直接的把值赋值给变量即可
引用数据类型是按照空间地址(引用地址)来操作的
var n={name:‘hello’};
1、先创建一个变量n
2、浏览器首先会开辟一个新的存储空间(内存空间),目的是把对象中需要存储的内容(键值对)分别的存储在这个空间中,为了方便后期找到这个空间,浏览器给空间设定一个地址(16进制的)
3、把空间的地址赋值给了变量
//1.求console.log(result)的结果
var ary=[1,2,3,4];
function fn(ary){
ary[0]=0;
ary=[0];
ary[0]=100;
return ary;
}
var result-fn(ary);
console.log(result);
(三)"原始值"类型(基本数据类型/值类型)有哪些
1. number数字
NaN、Infinity、正常数学........
2. string字符串
普通字符串、模板字符串
3. boolean布尔
4. null空对象指针
5. undefined未定义
6. symbol创建唯一值
Symbol
函数前不能使用new
命令,否则会报错。这是因为生成的 Symbol 是一个原始类型的值,不是对象
。也就是说,由于Symbol 值不是对象
,所以不能添加属性。基本上,它是一种类似于字符串的数据类型
。
Symbol函数可以接受一个
字符串作为参数
,表示对 Symbol 实例的描述
,主要是为了在控制台显示,或者转为字符串时,比较容易区分。
Symbol.iterator:for of 循环的底层处理方法
Symbol.toStringTag:Object.prototype.toString.call()
Symbol.hasInstance:instanceof
Symbol.toPrimitive:获取原始值数据类型转换、比较
console.log(Symbol('aa') === Symbol('aa'));
// false
let obj = {
[Symbol('aa')]: 100
}
7. bigInt大数
JS中有最大、最小数字界限
服务器端(数据库), number后面加上一个n就表示是bigint
服务端返回一个数字 & 数字超过了最大安全数
- 如果只是呈现出来,转换为字符串即可
如果需要运算,需要用BigInt进行运算
console.log(Number.MAX_SAFE_INTEGER);
// 9007199254740991
console.log(Number.MIN_SAFE_INTEGER);
// -9007199254740991
(四)对象/引用数据类型有哪些
1. object
(1){} plainObject
(2) [] array
(3) /^$/ RegExp
(4) new Date
2. function 函数类型 可执行对象
函数表达式、函数声明、new创建一个(function和Function)函数 三者的区别是什么?
(1)函数声明
function a() {}
表示函数声明,可以放在代码的`任何位置,任意调用`
可以先使用后定义,会对函数的声明进行一个提示
(2)函数表达式
var a = function() {}
函数表达式,必须`先定义后使用`
(3)new创建函数(function)
var a = new function(){}
在js方法中被当作一个类来处理,这种定义下,a代表了这个方法的类,也就是这个方法本身
如果该方法中返回值是`数组、方法或是别的类`,那么a不再表示该方法,而是表示返回的新类了
var a = new function(){ return '测试'}; // {}
console.log(a); // {}
var a = new function() {
return [1,2];
};
// [1,2]
var a = new function() {
return new String('测试');
}
// '测试'
因为new表达式之后返回一个引用对象都将覆盖new创建的匿名对象,如果返回一个`基本类型(
无return时,return原始类型是undefined
)`,那么就返回new创建的匿名对象
(4)new创建函数(Function)
var a = new Function() {'a', 'b', 'return a+b'};
// f anonymous(a,b) { returb a+b};
所有的函数都是Function类的实例,若函数当成对象时,函数名就相当于对象名
当成函数时,有一个属性prototype指向于原型对象
当成对象时,有一个属性__proto__,指向所属类的原型