数据类型
基本数据类型
string number boolean
复杂数据类型(引用类型)
Array Date Object RegExp String Number Boolean
如何获取一个数据的数据类型
使用关键字 typeof
typeof返回值为string类型
String Number Date 首字母大写的都是构造函数
两个空的类型
null
undefined
什么时候对象会是null
//变量不可能为null值,除非手动去设置
什么时候要给对象赋值为null?
//要解除对象的占用(引用)的时候
全等于和等于的区别
=== 全等
类型和值都要进行比较
== 等于
只比较值
in关键字
最常用的是在for in 循环中 遍历对象的键
1 | for(var k in obj){ |
注意: 使用in关键字的时候,属性名称为字符串类型,需要用引号引起来
注意: in关键字操作数组的时候判断的是索引是否存在,而不是值
1 | var arr = [4, 6, 3, 4]; |
新建对象
1 | var now = new Date(); |
值类型和引用类型
说明
值类型: string number boolean undefined
// 存储的就是数据本身的变量就是值类型的数据
//引用类型:object
// 存储的是数据在内存中的地址,数据在内存中单独存储 就是引用类型的数据
/引用类型赋值
//引用类型赋值的时候,是将变量中存储的地址复制一份单独存储,但是两个变量共享同一个对象
//修改其中一个对象,两外一个引用来访问的时候,也会访问到修改后的对象
###特征
//值类型的赋值
//直接将存储的数据复制一份进行赋值,两份数据在内存中是完全独立的
引用类型相反
在函数中的使用
值类型做函数的参数
//函数内部的变量,也就是形参和实参只是简单的赋值操作,两个数据独立存储于内存中的
//在函数内部对形参进行修改,不会影响外面的变量
/引用类型做函数的参数
//还是把实参存储的地址赋值给了形参,在函数内部,形参同样也指向该对象,
//所以,在函数内部对该对象进行修改,会影响到外面的变量
注意:如果在函数内部重新创建对象,为该形参赋值,那么两个对象将不再有关系
//修改其中一个,另外一个不受影响
对象的动态特征
对象的动态性是指,在对象创建出来之后,为对象添加新的属性或者方法
使用点语法进行赋值的时候,如果对象存在该属性,是修改操作
//如果对象不存在该属性,是给该对象新增属性并且赋值
对象是不是就是键值对儿的集合
// 对象名[属性名] 注意这里的属性名 是字符串
1 | console.log(obj["name"]); |
//这里如果使用的键不是字符串类型,会隐式的转换成字符串类型
/新增属性、方法的方式有:
//1.点语法
//2.通过 [] 的形式去添加
逻辑中断
即c中的短路
delete关键字
1 | //delete关键字可以用来删除对象的属性,还有未使用var声明的变量 |
定义函数
1.函数声明
1 | function funcName(){ |
DOM操作复习
1 | //增 |
异常处理
异常最大的特征,就是一旦出现异常,后面的代码将不会再执行
//那为了保证后面代码在出现异常之后,还能继续执行,所以就要进行异常处理
注意 语法异常 try catch无法捕获
异常捕获语句
1 | //try catch finally |
面向对象
概念
面向过程的思维方式:
//就是把解决问题的关注点,放到解决问题的每一个详细的步骤上面!
面向对象的思维方式:
//就是把解决问题的关注点,放到解决问题需要的一些列对象身上
在JS当中 什么是对象?
//键值对儿的组合就是对象
现实生活中的对象的特征对应到JS当中是对象的属性!
现实生活中的对象的行为对应到JS当中就是对象方法
1 | //如何在一句话中找出所有的对象 |
面向对象是对面向过程的封装,有了面向对象并不意味着,就可以抛弃面向过程
为什么要学习面向对象
看懂框架
//编写代码的时候的原则:DRY
//Don’ t repeat yourself
使用函数封装
使用函数将代码封装,使得复用性更高
使用函数封装带来的问题:
//1.全局变量污染
//2.代码结构不够清晰,维护不方便
使用对象封装
/使用对象进行封装后的优势
//1.暴露在全局的只有一个对象名 不会造成全局变量污染
//2.使用对象将代码进行功能模块的划分,有利于日后的维护
little tip: itar 敲tab就可以出现for循环