1.基础知识
基本数据类型 number string boolean null undefined Symbol
引用数据类型 object(Function Array RegExp)
Symbol
es6 新增了一个基本数据类型Symbol,表示独一无二的值,最大的用法是用来定义对象的唯一属性名。
<script>
let car=Symbol('car');
let obj={
[car]:'bwm'
}
obj.car="audi";
console.log(obj);
console.log(obj.car);
console.log(obj[car]);
</script>
复制代码
2.栈内存与堆内存
<script>
/* 引用数据类型 会开辟一个内存【栈内存(内存的地址) 和 堆内存(内存的值)】 */
let obj1 = {name:'leo',age:20};
let obj2 = {};
/* obj1的栈内存的地址给了obj2 */
obj2 = obj1;
/* obj2 把obj1的堆内存的name值 由leo 改成了 lily */
obj2.name="lily"
/* 所以 obj1 和 obj2 的值是一样的,都是obj1的堆内存的值 */
console.log('obj1',obj1);
console.log('obj2',obj2);
</script>
复制代码
3.const
<script>
/* 定义常量 不能给常量重复地赋值 */
const url = 'http://timemeetyou.com:8889/api/private/v1/';
/* url = 'http://www.baidu.com' */ /* 会报错 */
/* 定义对象 引用数据类型 会开辟一个堆内存 内存地址不会变化*/
/* 地址不会被改变 也就不会报错 */
const obj = {
name:"zhangsan"
}
obj.name = 'lili'
obj.age = 20
console.log(obj);
/* 改变obj的内存地址会报错
let obj2 = {};
obj = obj2; */
</script>
复制代码
4.工厂模式
软件工程领域的一种设计模式, 抽象了创建对象的过程, 通过函数封装创建对象的细节。
🍎工厂模式的缺点:
看不出类型(比如是时间对象 会具有时间对象的属性和方法)--解决:构造函数
函数重复、浪费资源(消耗内存)--解决:原型
<script>
function getPerson(name, age, job, address) {
let person = new Object();
person.name = name
person.age = age
person.job = job
person.address = address
person.intro = function () {
document.write(
`<p>姓名:${this.name}</p>
<p>年龄:${this.age}</p>
<p>职业:${this.job}</p>
<p>住址:${this.address}</p> `
)
}
return person
}
let person1 = getPerson('lily', 20, '工人', '南京');
person1.intro()
</script>
复制代码
5.构造函数
系统提供的构造函数:String Number Boolean Object RegExp Date Array
构造函数一般以大写字母开头。
构造函数也是函数,只不过可以用来创建对象。
🍎与工厂模式对比:
没有显式创建对象
直接将属性和方法赋给了this对象
没有return\
<script>
function Person(){
this.name = '张三'
this.fn = function (){
document.write(this.name)
}
}
/* new 先创造了一个是实例化对象 并且把this给了实例化对象per1 */
/* 也就是把属性和方法给了per1 */
let per1 = new Person();
console.log(per1);
</script>