JS高级第一天基础复习知识点JS调试工具的使用和异常处理

一、先来基础复习

(一)填空题

  1. JavaScript 包含: ____, ____, 和 ____.
  2. JavaScript 的基本类型有 ____, ____, ____, ____, 和 ____.
  3. JavaScript 的复合类型有 ____, ____, ____,
  4. JavaScript 还有两个空类型: ____ 和 ____.
  5. JavaScript 中获得类型的关键字是 ____. 使用该运算符返回的结果是什么类型? ____.
  6. JavaScript 中 === 和 == 有什么区别? ____.
  7. JavaScript 中 in 运算符有什么用? ____.
  8. JavaScript 中创建对象使用 ____ 运算符.
  9. 什么是引用类型, 什么是值类型? ____.
  10. JavaScript 什么叫逻辑中断: ____.
  11. JavaScript 中 delete 运算符的作用是 ____.
  12. JavaScript 中循环语句有 ____ 种. 分别是: ____, ____, ____, 和 ____.
  13. JavaScript 中分支语句有 ____ 种. 分别是: ____, ____.

答案:
1.ECMAScript,DOM,BOM
2.string、number、boolean、undefined、null
3.object、function、arrar
4.null、undefined
5.typeof、string类型
6.全等===:比较类型和值。等于==:只比较值。

  1. 一般和for循环一起,用来遍历对象。
    也可以单独使用,来判断对象里是否含有某个值;
    例:var obj={name:"王银辉"}
    console.log("name" in obj)//返回 true。意思是判断obj对象里是否有name键。

注意:对象里的所有键,都是string类型。值该是什么类型就是什么类型。

如果 in 关键字用于数组的话,是什么情况呢。

var arr=[1,2,3,4];
console.log(0 in arr);//返回true;这里的0指的是索引值,意思是arr的第0位是否有值。肯定有啊,因为第0位的值是1。如果输入一个10,就会返回false,因为第10位没有值。

还可以用indexOf()方法来判断数组里的某个值的索引。
console.log(arr.indexOf(4));//判断arr数组里的4的索引位置,会打印3。
8.new
9.引用类型就是复杂类型,值类型就是简单类型。
那么复杂类型和简单类型有什么区别吗?

简单数据
var str1="王宝强";
var str2=str1;//将str1赋值给str2;
      str1="马蓉“;//再将str1修改为马蓉。
console.log(str2)//猜猜会会打印什么。会打印王宝强。
image.png
复杂数据
var p1={
           name:"我最帅",
           age:22
       }
       var p2=p1;
       p1.name="你不帅";
       console.log(p2.name);
不知道这个图能不能看懂

总结:简单数据类型修改变量后,会新建个内存空间,存放修改后的数据。
复杂数据类型不管怎样修改操作的都是同一片内存空间。

  • 简单数据类型做为参数传进函数内

var num=100;

        function fn(num) {//这里的num管你妈的是谁,只要在括号里,都当做是形参,初始化都是undifinde。
           return num=1;// 而且num 是局部变量。只在这个函数内生效。对全局变量不影响。
        }
        
        fn(num);//我执行一遍,打印看看数据有没有被修改
        console.log(fn(num));//所以打印函数的时候会返回1
        console.log((num));//打印100
image.png
  • 复杂数据类型做为参数传进函数内

  var obj={name:"王银辉"};

        function fn2(param) {
            param.name="王杰伦"
        }

        fn2(obj);

        console.log(obj)
image.png
  • 对象的动态特性

对对象的进行增、删、改等一系列的操作,就叫做对象的动态特性。

对象两种获取属性的方法。先创建一个对象。
var obj={name:"王银辉"}

第一种:点方法
console.log(obj.name);

第二种:数组方法
console.log(obj["name"]);
//注意对象里面的键是需要加引号""的。加上引号就是字符串类型的。
因为对象里面的键本身就是字符串类型的。

如果不加 JS也会对它进行隐式转换。不加的话打印也还是字符串类型的。
那你该说了,那干脆就不加了呗。其实不加也行,但为了语法规范还是加上为好。

console.log(typeof obj.name)//string类型

10.逻辑中断也叫短路运算

例:var abc = 0 || 1;//你说abc等于几。
console.log(abc);//打印1;
因为在JS中,0代表false;1代表true。而逻辑或||中,只要有一项是true;他就返回true的那方。

11 delete 的作用:可以用来删除对象的属性,而且还带bool类型的返回值的。让你知道这个东西有没有被删除掉。
var obj={name:"王银辉",age:99};

    console.log(obj);//先打印一遍

    delete obj.age;
    
    console.log(obj);//发现已经删除啦。
    console.log(delete obj.agde);//返回true;因为这个关键字会返回一个bool值,可以用来测试某个属性是否被删除。

一个用var声明的变量和一个不用var声明的变量。(可以删除不用var声明的变量)

var num1=1;
       var re1=delete num1;
       console.log(num1,re1);//打印num1和bool值。发现没有删除掉。

       num2=2;
       var re2=delete num2;
       console.log(re2);
       console.log(num2);//会报错,因为num2已经不存在啦。

返回值有两个地方要注意。

  • 如果删除一个对象没有的属性也会返回true;
    因为delete 的返回值,会在文档里查这个属性值,发现没有啦,就会给你返回一个true;它不会管这个东西是不是胡写的。

  • 它的返回值不包含原型对象里的。
    也就是说删除原型里面的属性,不会删除掉但也会给你返回一个true。
    12.常用的有四种,for、for in、 while、do while。
    13.if和switch

二、调试工具的使用

JS调试

1、直接跳到下一个断点。会暂停。
2、一步一步的执行,但不会进入函数里面。
3、函数内部逐句执行。
4、跳出函数。
5、下一步。
6、让断点全部失效。再点就全部生效。为了就是不让你一个一个的取消,再添加的时候还要一个一个的添加。
7、异常不停止。

三、函数命名及DOM的操作和异常处理

  • 函数命名的三种方式

常规

function fn1(){
}

利用构造函数创建

var fn2=new Function();

第三种
var fn3=function name(){
}
里面有两个名字,name这个名字只能在函数内部使用。

  • DOM的操作

总结下来四个字(增、删、改、获)

增加
document.createElement();
appendChild()

删除
removeChild


style对象
className
id
innerHTML
innerText


document.getElementsByTagName("");
document.getElementById("");等等。

  • 异常处理
    我们先说一下,异常对我们有什么影响。
 var str1="abc";
    console.log(str1);
    console.log(随便打印,肯定会抛出异常);
    var str2="猜猜我会不会执行";
    console.log(str2);//是不会打印的。

注意:出现异常会影响后面代码的执行。

异常捕获
捕获异常,使用try-catch语句

try{
//这里写可能出现异常的代码
}catch(e){
//这里的e就是捕获的异常对象
//可以在这里写,出现异常后的处理代码
}

异常捕获语句执行的过程为:

代码正常运行, 如果在try中出现了错误, try 里面出现错误的语句后面的代码都不再执行, 直接跳转到 catch 中
catch中处理错误信息
然后继续执行后面的代码
如果 try 中没有出现错误, 那么不走 catch 直接执行后面的代码
通过try-catch语句进行异常捕获之后,代码将会继续执行,而不会中断。

注意:

语法错误异常用try-catch语句无法捕获,因为在预解析阶段,语法错误会直接检测出来,而不会等到运行的时候才报错。
try-catch在一般日常开发中基本用不到,但是如果要写框架什么的,用的会非常多。因为这个会让框架变得健壮

抛出异常

如何手动的抛出异常呢?

案例:自己写的一个函数,需要一个参数,如果用户不传参数,此时想直接给用户抛出异常,就需要了解如何抛出异常。

抛出异常使用throw关键字,语法如下:

throw 异常对象;
异常对象一般是用new Error("异常消息"), 也可以使用任意对象

function test(para){
    if(para == undefined){
        throw new Error("请传递参数");
        //这里也可以使用自定义的对象
        throw {"id":1, msg:"参数未传递"};
    }
}

try{
    test();
}catch(e){
    console.log(e);
}
异常的传递机制
function f1 () {
    f2(); // f1 称为调用者, 或主调函数, f2 称为被调用者, 或被调函数
}

function f2 () {
    f3();
}

function f3() {
    throw new Error( 'error' );
}
f1();
当在被调函数内发生异常的时候,异常会一级一级往上抛出。

异常捕获语句的完整模式
异常捕获语句的完整模式为try-catch-finally

try {
    //可能出现错误的代码
} catch ( e ) {
    //如果出现错误就执行
} finally {
    //结束 try 这个代码块之前执行, 即最后执行
}

finally中的代码,不管有没有发生异常,都会执行。一般用在后端语言中,用来释放资源,JavaScript中很少会用到。

四、面向对象的基本概念

学到这里啦,想一下,JS是不是很注重过程,我们把心思都花在了过程上面,要求过程不能出错,至到运行成功。
面向对象就是把过程的重要性削弱,让我们把关注点放到结果上面。一种思维的改变。
举个洗衣服例子:

  • 面向过程的思维:
    1、找到洗衣机
    2、打开开关
    3、放入脏衣服
    4、盖上盖子
    5、晾晒衣服

  • 面向对象的思维:
    1、找到洗衣机
    2、衣服洗好啦

明白这个意思就好啦。

  • JS中的对象
    广义上JS中的所有东西都可以看作是一个对象。
    狭义上,对象指的就是健值对的组合。
    var obj={name:"王银辉",age=18}

注意:面向对象是对面向过程的封装,有了面向对象并不意味着,就可以抛弃面向过程。

五、利用对象封装函数

例如:有三个DIV标签,我们怎么用JS给这三个DIV标签添加背景颜色?

用JS代码写:
 var div=document.getElementsByTagName("div");
           for(var i=0;i<div.length;i++){
               div[i].style.background="red";
           }
用普通函数封装:
 function bgColor(ele,color) {
               var ele=document.getElementsByTagName(ele);
               for(var i=0;i<ele.length;i++){
                   ele[i].style.background=color;
               }
           }
bgColor("div","red")

普通函数封装的缺点:

  • 全局变量污染;
  • 维护麻烦(因为有维护方便的,那就是利用对象进行封装)。
利用对象进行封装:
var bgColor={
               id:function(id){
                   return document.getElementById(id);
               },
               tag:function(tagName){
                   return document.getElementsByTagName(tagName);
               },
               setStyle:function(par){
                   for(var i=0;i<par.length;i++){
                       par[i].style.background="yellow";
                   }
               }
           };

           var divs=bgColor.tag("div");
                bgColor.setStyle(divs)

这些属性和方法都是bgColor里面的一个键值对。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容