JS之面向对象:对象属性
前几个月通过腾讯课堂平台报名了JS高级开发课程,学习了 ES5|ES6|React,在课堂里面记到了许多知识点,便存放在有道云笔记,后觉得年龄逐渐变大,感觉也就没有必要藏着掖着 慢慢搬出来留给有需要的人吧
对象属性 【JS之面向对象】
一、数据类型
一、什么是数据类型?答:数据类型【引用类型的数据是放在堆里面,基础数据也是值类型放在栈里面】
二、用于的业务场景?答:申明变量时使用不同需要,使用不同变量关键词
三、引用类型与基本的区别? 答:基本类型 是不可发生改变,而引用类型是可以发生变化的,重要:值存放的位置
四、比较,是否两个值是否相等?答:基础类型的比较是值的比较,引用数据类型为引用的比较,TypeOf 【不多】
类型分为
1. 基础类型 【字符串 string、数字 number、布尔 、未定义 Undefined、ES6:[ Symbol ] 】
var str = "123";
var num = 1;
var bol = true;
var km = null;
var sym = Symbol('name'); //外语:森波, ES6 里面的独一无二,如果有两个Name是一样的,值都是不同的
2.引用类型 【数组 Array、对象 Object、函数 Funtion 】
var arry = new Arry();
var model = {};
var fun = function(){};
注意:引用类型的数据是放在堆里面,基础数据也是值【基础类型】类型放在栈里面,与 C#/NET 分类不同
:引用类型存储值是可变的,大小不定, 值会在堆建立新空间 , 就像于赋值,而栈的引用地址会发生改变
:引用类型同时存储在栈和堆内存中里面的对象【指针 与 对象】
来到重要点(编写并看结果得到结论)
基础类型【栈】
var a = 10;
var b = a; //(复制的情况)会新开辟新栈的空间,并不是指向给a的地址
a = a + 1;
console.log(b); // Value: 10 | 发现与a互不影响
引用类型 【堆】
var model1 = {};
var model2 = model1; // 赋值 Copy了一个指针给 model2,此为相连互应
model1.name="baicexxqtd";
console.log(model2.name); //value: baicexxqtd
var model3 = { name:"bai" };
var model4 = model3;
model4.name = "baicexxqtd"; //value: baicexxqtd
console.log(model3.name);
var model3 = { name:"bai" };
var model4 = model3;
model3.name = "baicexxqtd";
console.log(model4.name); //value: baicexxqtd
const name1="bai"; //可改变 |
var str = new String("bai"); // new 关键词是需要在堆里面开辟空间的属于 引用类型
var str2 = String("bai"); //属于 堆
var str3 = "bai"; //属于 栈
【基础类型 比较】
var a = 1;
var b = true;
console.log(a==b); //true 也可用 Typeof 检测
【引用类型 比较】
var arry1 = {};
var arry2 = {};
console.log(arry1 === arry2); //false
【值传梯 测试】
var arry1 = [0,1,2,3,4];
fucntion add(){
arry1[0] = 99;
}
console.log(arry1[0]); // 99:发现已更改数据
var num = 1;
function add(){
num = 0;
}
console.log(num); // 0:发现已更改数据, 为什么因为num是全局变量
类型检测:
typeof 2; //int
typeof '123'; //string
typeof true; //bool
typeof (funtion(){}) //函数
typeof {}; //object ---- 检测对象不可用
Object.prototype.toString.call({}); // 可用于此方法检测 "[object Object]"
typeof []; //object ---- 检测数组不可用 可通过
Object.prototype.toString.call([]); // 可用于此方法检测 "[object Array]"
Object.prototype.toString.call((b=1)); //比 typeof 方法强大