数据类型分类(一)

(一) 什么是基本数据类型和引用数据类型

1、值类型操作(基本数据)

var a=12;
/*
 var a=12;分成三步:
 1.先声明一个变量a,没有赋值(默认值是undefined)
 2、在当前作用域中开辟一个位置存储12这个值
 3、让变量a和12关联在一起(定义:赋值)

 */
var b=a;
b=13;
console.log(a);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uGFzF3MH-1616306263724)(./1546588180269.png)]

2、引用类型操作的是空间地址(引用数据)

var ary1=[12,23];
var ary2=ary1;
ary2.push(100);
console.log(ary1);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sREzhlOg-1616306263731)(./1546589160381.png)]

(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、把空间的地址赋值给了变量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ACMWBegV-1616306653096)(./微信截图_20180829134919.png)]

//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);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T9HewJin-1616306653100)(./1536214755025.png)]

(三)"原始值"类型(基本数据类型/值类型)有哪些

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
服务端返回一个数字 & 数字超过了最大安全数

  1. 如果只是呈现出来,转换为字符串即可
    如果需要运算,需要用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__,指向所属类的原型

版权声明:本文为wtianheihei原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>