javaScript的组成部分
DOM
Document Object Mode文档对象模型,此处的文档是指的HTML页面(HTML文档);
为我们提供了一套操作页面的元素的api(一套工具);
api:application(应用) programming(编程) interface(接口);
BOM
Browser Object Mode 浏览器对象模型,提供一个和浏览器交互的对象;
和新对象是:window;
ECMAScript
规定的语法标准;
基本数据类型和复杂数据类型
基本(简单)数据类型
string 字符串类型 number 数值(小说和整数) boolean 布尔类型(true | false) null 空 undefined 未定义
复杂(复合)数据类型
Object 对象类型 Array 数组类型 Date 日期类型 Math 类型 Function 函数 ====>所返回的非object,返回function -->其他都是返回objec RegExp 正则表达式 String 字符串对象类型 Number Boolean
判断数据类型
关键字:typeof
语法: typeof 变量
typeof 字符串 string
typeof 10 number
typeof undefined undefined
typeof null ---> object(正确), 在这里要特别注意,typeof bull 返回的是Object,而非null;假如用instanceof 来判断是否为 Object时,返回却为false。
console.log(typeof null); //Object
console.log(null instanceof Object); //true |false(错误的)
逻辑运算符(短路运算符)
01 逻辑非
符号:!
操作符: !表达式
结果:布尔类型的值,要么是true要么是false
02 逻辑与
符号:&&
操作符:表达式1 && 表达式2
结果:并非是布尔类型的,而是表达式之一
如果表达式1为真,那么就返回表达式2,否则就返回表达式1
03 逻辑或
符号:||
操作符:表达式1 || 表达式2
结果:并非是布尔类型的,而是表达式之一
如果表达式1为真,那么就返回表达式1,否则就返回表达式2
console.log(!2);
console.log(0 && 1); //0
console.log(0 && 0); //0
console.log(1 && 1); //1
console.log(1 && 0); //0
console.log(0 && 2); //0
console.log(2 && 0); //0
console.log(2 && 3); //3
console.log(0 || 0); //0
console.log(0 || 1); //1
console.log(1 || 0); //1
console.log(1 || 1); //1
console.log(1 || 2); //1
console.log(2 || 1); //2
值类型和引用类型
值类型
string
number
boolean
null
undefined
引用类型
Object类型(以下类型其本质都为Object类型);
Function(function---->object)
Array
Date
String
Number
Boolean
变量在内存中存储的结构,和超市的储物箱很像,有一个名字(比如说01,02,03),还有一个空间(可以存放数据的)
区别:
区别在于空间中存储的信息
值类型:存储的是具体的数据
引用类型:存储的是一个引用(reference)[地址],该引用指向内存中一块空间,这块空间中存储着具体的数据
举例:
01(变量的名称) --->一个苹果(具体的数据)
02(变量的名称) --->苹果在超市的第二排货架的第一列(地址)
var a = 10; //首先找到一个名称为a的箱子,然后把数据10放在箱子中
var obj = {
name: "zs",
age: 20,
dog: {
name: "旺财",
color: "绿色"
}
};
赋值(=)
左边变量=右边变量
var a = 10;
内部细节:把右边变量(空间中)存储的值复制一份放在左边变量(空间中)
值类型赋值:
赋值操作:把右边变量(空间中)存储的值[具体数据]复制一份放在左边变量(空间中);
修改了其中的一个变量对另外一个变量没有影响。
引用类型赋值
赋值操作:把右边变量(空间中)存储的值[地址]复制一份放在左边变量(空间中);
修改了其中的一个对象,会对另外一个对象产生影响。
<script>
var str1 = "让我掉下眼泪的,不止昨夜的酒";
var str2 = str1;
console.log(str1 == str2); //true
//尝试修改变量的值
str1 = "让我依依不舍的,不止你的温柔";
console.log(str1);
console.log(str2);
var obj1 = {name:"zs"};
var obj2 = obj1;
obj1.name = "lisi";
console.log(obj2.name);
//重新设置obj1的值
obj1 = {age:22}; //该行代码切断了obj2和obj1的联系
console.log(obj2.age); //undefined(正确)
</script>
对象的动态特性
javaScript中的对象和其他的大多数语言都不一样
对象支持动态特性:增加属性(方法) | 删除属性(方法) |修改属性(方法) |查询
对象:键-值对的集合(key-value)
属性:在对象内部声明的变量
方法:在对象内部定义的函数
操作对象的属性和方法可以使用两套方式:
- 01 点语法
<script>
//01 创建一个空的对象
var obj = {};
//02 动态添加属性
obj.name = "zhangsan";
console.log(obj.name);
//03 修改属性
obj.name = "lisi";
console.log(obj.name);
//区分添加还是修改:在通过点语法的方式访问属性的时候,先检查改属性是否存在,如果存在那么就是修改
//如果该属性不存在,那么就是添加
//04 添加方法
obj.showName = function (){
console.log("我的名字");
}
obj.showName();
//修改方法
obj.showName = function (){
console.log("哈哈哈---");
}
obj.showName();
//05 删除对象的属性
//关键字 delete
//语法: delete 对象.属性
delete obj.name;
console.log(obj.name); //undefined
</script>```
* 02 中括号[]
```<script>
//01 创建一个空的对象
var obj = {};
//02 动态添加属性
var name = "testName";
obj[name] = "zhangsan"; //注意:在使用[]语法的时候,key必须是字符串需要加""
//name是window的name
console.log(obj);
//03 修改属性
obj["name"] = "lisi";
console.log(obj["name"]);
//区分添加还是修改:在通过点语法的方式访问属性的时候,先检查改属性是否存在,如果存在那么就是修改
//如果该属性不存在,那么就是添加
//04 添加方法
obj["showName"] = function (){
console.log("我的名字");
}
obj["showName"]();
//修改方法
obj["showName"] = function (){
console.log("哈哈哈---");
}
obj["showName"]();
//05 删除对象的属性
//关键字 delete
//语法: delete 对象.属性
delete obj["name"];
console.log(obj["name"]); //undefined
obj["background color"] = "red";
console.log(obj);
</script>```
####delete关键字
作用:
* 1删除对象中的属性
* 2删除没有使用var关键字声明的全局变量
注意:
(1)返回值 布尔类型的值(我们可以通过该值来判断是否删除成功)
(2)使用var关键字声明的变量无法被删除
(3)删除对象中不存在的属性没有任何变化,但是返回值为true
(4)不能删除window下面的全局变量(使用var声明),但是可以删除直接定义在window上面的属性
```<script>
var dog = {
name:"阿黄",
color:"红色"
}
console.log(delete dog.color);
console.log(dog.color); //undefined
var a = 10;
b = 20; //没有使用var关键字声明的变量默认会成为全局变量,全局变量默认都会成为window的属性
console.log(b);
delete b;
//console.log(b);
console.log(a);
console.log(delete a); //删除不成功 false
console.log(a);
console.log(delete dog.age); //返回的是成功还是失败? 成功
//window
console.log(window.a);
delete window.a;
console.log(window.a);
window.demo = "demo";
console.log(window.demo);
delete window.demo;
console.log(window.demo);
</script>```
###循环分支
* for循环(最常用)
* while
* do...while(至少会执行一次)
* for...in(主要用于遍历对象)
var n = 0;
while (n >0)
{
//打印
console.log(n);
n --;
}
var a = 10;
do {
console.log(a);
a ++;
}while (a<10);
//条件结构
//if..else
//switch..case
var a = 3;
switch (a) {
case 1:
console.log(1);
break;
case 2:
console.log(2);
break;
default:
console.log("其他的数据");
}
###异常处理
* 01异常处理
异常处理的结构:
try{
}
catch(e){
}
* 02
正常情况下,如果程序出现了错误或者是异常,那么该行代码后面的所有代码都无法得到执行
但是,有些时候我们需要保证即便程序出现了问题,后面的代码也能够正常执行,这种情况就可以使用异常捕获结构
* 03 手动抛出异常
语法 throw 具体的信息
抛出的内容:字符串 + 对象
自己编码规范:如果出错或者是有异常,那么就抛出一个对象(msg code)
函数未定义 1001
变量未定义 1002
访问了错误的数据 1003
* 04 完整的异常捕获结构
try{
}
catch(e){
}
finally{
}
例子:
<script>
function demo() {
console.log("我是测试的函数");
}
try {
var a = 10;
console.log(a);
a(); //报错
//把可能出错的代码,放在try代码块中
}
catch (e) {
//如果上面的代码出现了错误,那么就会执行这个catch代码块中的任务
//一般在这个代码块中要做相应的补救处理
console.log("出错了");
//参数:e 异常信息
console.log(e);
}
demo();
</script>
<script>
try {
//可能出现问题的代码
function sum(a, b) {
if (a == undefined) {
//throw "请输入具体的参数!";
throw {
ErrMsg: "找不到该对象!",
ErrCode: 1004
}
}
console.log(a + b);
}
sum();
} catch (e) {
console.log(e, "____");
}
</script>
<script>
try {
//可能出错的代码
} catch (e) {
console.log(e, "____");
//出错了就执行这个代码块
}
finally {
//不管是否出错,都会执行这里的代码块
//一般在前端开发中不会使用,多多用于后端开发Node.js 主要用于在最后释放资源
}
###DOM操作
增加 | 删除 | 修改 |查询
//01 创建一个div
var divdemo = document.ctresteElement("div");
//02 设置div的背景颜色为红色
divdemo.style.backgroundColor = 'red';
//03 把div添加到页面中
document.body.appendChild(divdemo);
//04 获得页面中之前创建div
var divTest = document.getElementByTagName('div')[0];
//05 删除
document.body.removeChild(divTest);
###简单的函数封装
* 面向过程思维
<body>
<div>我是第1个div</div>
<div>我是第2个div</div>
<div>我是第3个div</div>
<div>我是第4个div</div>
<div>我是第5个div</div>
<p>我是屁</p>
<p>我是屁</p>
<p>我是屁</p>
需求:
获取页面中所有的div,设置他们的边框,1px solid #e2e
需求:
获取页面中所有的p标签,设置他们的边框,1px solid #e2e
<script>
//01 封装获取标签的代码
function getElements(eleName) {
return document.getElementsByTagName(eleName);
}
//02 封装设置样式的函数
function setStyle(eles) {
for (var i = 0; i < eles.length; i++) {
eles[i].style.border = "1px solid #002";
}
}
var divs = getElements("div");
var ps = getElements("p");
setStyle(divs);
setStyle(ps);
</script>
</body>
* 面向对象思维
<script>
var $ = {
getEle: {
getElementsByTagName: function (eleName) {
return document.getElementsByTagName(eleName);
},
getElementsById: function (id) {
return document.getElementById(id);
},
getElementsByClassName: function (className) {
return document.getElementsByClassName(className);
}
},
setStyle: {
setBorder: function (eles) {
for (var i = 0; i < eles.length; i++) {
eles[i].style.border = "1px solid #002";
}
},
setColor: function (eles) {
for (var i = 0; i < eles.length; i++) {
//......
}
},
setCss: function (eles) {
for (var i = 0; i < eles.length; i++) {
//.....
}
},
}
}
$.setStyle.setBorder($.getEle.getElementsByTagName("div"));
$.setStyle.setBorder($.getEle.getElementsByTagName("p"));
</script>
网友评论