JavaScript 基础与面向对象编程
数据类型概览
- 字符串(string)
- 数值(number)
- 布尔值(boolean)
- 空值(null)
- 未定义(undefined)
- 对象(object)
变量与类型推断
let a;//a会是什么类型呢?
console.log(a);
实际上这里的a是undefined
这是因为js本身是一门弱类型的语言,变量的类型由值决定->甚至可以通过赋值操作改变类型
- a=1时 a就成为了Number类型
- a='hello'时 a又变成了string类型
- 当我们对已经赋值过的变量进行其他类型的赋值可以改变它的类型
对象字面量与数组
- 对象字面量:
{} - 数组:
[] - js提供了对象(object)字面量(字面意思上就知道是哪个对象)
面向对象编程
简单对象构造
- 对象由属性和方法构造
let zs={
name:'张三',
hometown:'上海',
talk:function(){
console.log('hello');
}
}
复杂关系建模和设计模式实践
- 人际关系模拟
- 属性与方法设计
- 代理模式(Proxy)
用下面这个代码简单实现一个实际中的代理模式
ps:小李送花给小李,但是他不好意思,所以拜托小红帮他转交给小美
<body>
<script>
let xl={
name:"小李",
sendFlower:function(target){
target.receiverFlower(xh);
}
}
let xm={
xq:30,
name:'小美',
receiverFlower:function(sender){
if(this.xq<80){
console.log('不约');
}
else{
console.log('ok');
}
}
}
let xh={
name:'小红',
receiverFlower:function(sender){
//一段时间后给小美
setTimeout(function(){
xm.xq=90;
xm.receiverFlower(sender);
},3000)
}
}
</script>
</body>
面向接口编程
- 灵活性与可扩展性
上面的案例中小美和小红都有收到花的行为,于是我们可以实现这个接口,这样代码就实现了复用,更加方便灵活
null 与 undefined 的区别
undefined:未赋值或不存在的属性null:显式赋值的空值
//null 和unnudefined
//变量声明了但没赋值,;类型无法确定,是undfined
//或对象属性/数组元素不存在时,JS自动给undfined
//JS 弱类型语言
let a ;
console.log(typeof a);
a=1;//变量的类型由值决定
console.log(typeof a);
let obj={
name:'张三'
}
console.log(obj.friend);
//null 表示一个空值
//有值
//主动赋值给变量,表示这个值是空的
let b ='原有的值';
b=null;