JavaScript系列之程序调试/函数/事件/操作BOM对象

DOGIOOH 2020-11-13 01:49:49
函数 程序 javascript 调试 系列


JavaScript系列之程序调试/函数/事件/操作BOM对象

01 程序调试

JavaScript的代码可以在网页中直接调试,方法步骤如下:

  • 打开网页—>右键点击检查—>sources—>打断点—>刷新网页—>开始调试

Chrome开发人员工具提供多种调试方式:

  • 停止断点调试
  • 单步调试
  • 跳出当前函数
  • 移除断点

除了使用开发人员工具外,还可以通过alert()方法逐步调试。


02 函数

  • 函数的概念

    类似于Java中的方法,是完成特定任务的代码语句块。当代码出现有规律的重复的时候,就需要将代码抽象成函数,函数本身只需要写一次,但是可以多次调用。JavaScript的函数不但是“头等公民”,而且可以像变量一样使用,具有非常强大的抽象能力。

    JavaScript中函数的使用很简单,不需要定义属于某个类,可以直接使用。


  • 函数的分类

    函数可以分为系统函数和自定义函数

    • 常用的系统函数有:
      • parseInt(“字符串”);//将字符串转换为整型数字
      • parseFloat(“字符串”);//将字符串转换为浮点型数字
      • isNaN();//用于检查其参数是否是数字

  • 定义函数的方式
//定义函数的方式(一)
function method(参数){
//方法体;
//return;可有可无
}
//定义函数的方式(二)
var 变量名 = function (参数) {
//方法体;
//return;可有可无
};
//注意事项:两种定义完全等价,第二种方式按照完整语法需要在函数体末尾加一个;,表示赋值语句结束。

  • 调用函数

    • 调用函数时按顺序传入参数即可。
    function_name(parameter1,parameter2...);
    //注意事项:JavaScript允许传入任意个参数而不影响调用,因此传入的参数比定义的参数多也没有问题,即使函数内部并不需要这些参数;传入的参数比定义的少也不会报错,会返回NaN。
    

  • 变量作用域

    • 如果一个变量在函数体内部申明,则该变量的作用域为整个函数体,在函数体外不可引用该变量。
    • 如果两个不同的函数各自申明了同一个变量,那么该变量只在各自的函数体内起作用。
    • JavaScript的函数可以嵌套,此时,内部函数可以访问外部函数定义的变量,反过来则不行。
    • JavaScript的函数在查找变量时从自身函数定义开始,从“内”向“外”查找。如果内部函数定义了与外部函数重名的变量,则内部函数的变量将“屏蔽”外部函数的变量。
    • 不在任何函数内定义的变量就具有全局作用域。
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body onload="second( )">
    <script>
    var i=20;//全局变量
    function first( ){
    var i=5;
    for(var j=0;j<i;j++){
    document.write("&nbsp;&nbsp;&nbsp;&nbsp;"+j);
    }
    }
    function second( ){
    var t=prompt("输入一个数", "")
    //second()中使用全局变量i=20
    if(t>i)
    document.write(t);
    else
    document.write(i);
    first( );
    }
    </script>
    </body>
    </html>
    
  • 变量提升机制

    JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部,但是JavaScript引擎仅仅自动提升了变量的声明,但不会提升对变量的赋值。如果在变量赋值语句前调用了该变量,那么该变量执行时为undefined类型。因此我们在函数内部定义变量时,要在函数内部首先声明所有变量。


03 事件

  • 在HTML标签中可以添加事件,可以给事件赋值,触发事件后调用函数或方法如:
<input name="btn" type="button" value="button_name" onclick="method( )" />
  • 常用事件大致有以下几类:
    • onload 一个页面或一幅图像完成加载
    • onlick 鼠标单击某个对象
    • onmouseover 鼠标指导移到某元素上
    • onkeydown 某个键盘按键被按下
    • onchange 域的内容被改变

04 操作BOM对象

  • BOM:浏览器对象模型 ( Browser Object Model )

    • BOM提供了独立于内容的 , 可以与浏览器窗口进行互动的对象结构。

    • window是整个BOM的核心,window对象不但充当全局作用域,而且表示浏览器窗口。

      window对象有innerWidthinnerHeight属性,可以获取浏览器窗口的内部宽度和高度。内部宽高是指除去菜单栏、工具栏、边框等占位元素后,用于显示网页的净宽高。

    • BOM可实现的功能:

      • 弹出新的浏览器窗口
      • 移动 , 关闭浏览器窗口以及调整窗口的大小
      • 页面的前进 , 后退
        … …

  • Window对象

    • 常用属性:

      • history 有关客户访问过的URL的信息
      //history对象保存了浏览器的历史记录,JavaScript可以调用history对象的back()或forward (),相当于用户点击了浏览器的“后退”或“前进”按钮。
      //注意:这个对象属于历史遗留对象,就目前而言,任何情况,都不应该使用history这个对象。
      
      • location 有关当前 URL 的信息
      //可以通过location.href获取一个完整的URL
      //要获得URL各个部分的值,可以通过以下方法
      location.protocol; // 协议
      location.host; // 主机地址
      location.port; // 端口号
      location.pathname; // 路径名称
      location.search;
      location.hash;
      //要加载一个新页面,可以调用location.assign()。如果要重新加载当前页面,调用location.reload()方法非常方便。
      
    • 常用方法:

      prompt( );//显示可提示用户输入的对话框,两个参数,输入对话框,用来提示用户输入一些信息,单
      击“取消”按钮则返回null,单击“确定”按钮则返回用户输入的值。常用于收集用户关于特定问题而反馈的信息。
      alert( );//显示带有一个提示信息和一个确定按钮的警示框,一个参数,仅显示警告对话框的消息,无返回值,不能对脚本产生任何改变
      confirm( );//显示一个带有提示信息、确定和取消按钮的对话框。一个参数,确认对话框,显示提示对话框的消息、“确定”按钮和“取消”按钮,单击“确定”按钮返回true,单击“取消”按钮返回false,因此与if-else语句搭配使用。
      close( );//关闭浏览器窗口
      open( );//打开一个新的浏览器窗口,加载给定 URL 所指定的文档
      setTimeout( );//在指定的毫秒数后调用函数或计算表达式
      setInterval( );//按照指定的周期(以毫秒计)来调用函数或表达式
      

  • Document对象

    • 常用属性:

      • referrer 返回载入当前文档的URL。可以通过document.referrer返回由哪个链接跳转至当前页面的。

      • URL 返回当前文档的URL

    • 常用方法:

      getElementById();//返回对拥有指定id的第一个对象的引用
      getElementsByName() ;//返回带有指定名称的对象的集合
      getElementsByTagName();//返回带有指定标签名的对象的集合
      write();//向文档写文本、HTML表达式或JavaScript代码
      
    • 动态改变层/标签中的内容

      • 我们可以通过document提供的get相关的方法获取到某节点或某一组节点,并动态修改该节点中的内容。
      document.getElementById("id_name").innerHTML="替换后的文内容";
      

  • Date对象:

    在JavaScript中,Date对象用来表示日期和时间。

    //获取系统当前时间
    var now = new Date();
    document.write(now); // Wed Jun 24 2015 19:49:22 GMT+0800 (CST)
    document.write(now.getFullYear()); // 年份
    document.write(now.getMonth()); // 月份,注意月份范围是0~11
    document.write(now.getDate()); // 日, 表示几号
    document.write(now.getDay()); // 星期, 表示星期几
    document.write(now.getHours()); // 时, 24小时制
    document.write(now.getMinutes()); // 分钟
    document.write(now.getSeconds()); // 秒
    document.write(now.getMilliseconds()); // 毫秒数
    document.write(now.getTime()); // 以number形式表示的时间戳
    
    • 案例:在网页中实现制作时钟特效
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
    #time{
    font-family: 微软雅黑;
    font-size: 50px;
    }
    </style>
    </head>
    <body>
    <div id="time"></div>
    <input type="button" value="start" οnclick="startTime()">
    <input type="button" value="stop" οnclick="stopTime()">
    <script>
    var myTime;
    function clock() {
    //获得系统当前时间
    var now = new Date();
    console.log(now);
    var hh = now.getHours();
    var mm = now.getMinutes();
    var ss = now.getSeconds();
    document.getElementById("time").innerHTML ="现在时间为:" + hh + ":" + mm + ":" + ss;
    }
    function startTime() {
    myTime = setInterval("clock()",1000);
    }
    function stopTime() {
    clearInterval(myTime);//清楚setInterval()返回的ID值,即取消setInterval的执行
    }
    </script>
    </body>
    </html>
    

  • Math对象

    • 常用方法:

      ceil();//对数进行上舍入 如Math.ceil(25.5);返回26
      floor();//对数进行下舍入 如Math.floor(25.5);返回25
      round();//把数四舍五入为最接近的数
      random();//返回0~1之间的随机数 包含0不包含1
      
    • 示例:实现返回的整数范围为1~100

      var num = Math.floor(Math.random()*99+1)// random获得的包含0不包含1的随机数
      

版权声明
本文为[DOGIOOH]所创,转载请带上原文链接,感谢
https://blog.csdn.net/yinyanyao1747/article/details/94404950

  1. [front end -- JavaScript] knowledge point (IV) -- memory leakage in the project (I)
  2. This mechanism in JS
  3. Vue 3.0 source code learning 1 --- rendering process of components
  4. Learning the realization of canvas and simple drawing
  5. gin里获取http请求过来的参数
  6. vue3的新特性
  7. Get the parameters from HTTP request in gin
  8. New features of vue3
  9. vue-cli 引入腾讯地图(最新 api,rocketmq原理面试
  10. Vue 学习笔记(3,免费Java高级工程师学习资源
  11. Vue 学习笔记(2,Java编程视频教程
  12. Vue cli introduces Tencent maps (the latest API, rocketmq)
  13. Vue learning notes (3, free Java senior engineer learning resources)
  14. Vue learning notes (2, Java programming video tutorial)
  15. 【Vue】—props属性
  16. 【Vue】—创建组件
  17. [Vue] - props attribute
  18. [Vue] - create component
  19. 浅谈vue响应式原理及发布订阅模式和观察者模式
  20. On Vue responsive principle, publish subscribe mode and observer mode
  21. 浅谈vue响应式原理及发布订阅模式和观察者模式
  22. On Vue responsive principle, publish subscribe mode and observer mode
  23. Xiaobai can understand it. It only takes 4 steps to solve the problem of Vue keep alive cache component
  24. Publish, subscribe and observer of design patterns
  25. Summary of common content added in ES6 + (II)
  26. No.8 Vue element admin learning (III) vuex learning and login method analysis
  27. Write a mini webpack project construction tool
  28. Shopping cart (front-end static page preparation)
  29. Introduction to the fluent platform
  30. Webpack5 cache
  31. The difference between drop-down box select option and datalist
  32. CSS review (III)
  33. Node.js学习笔记【七】
  34. Node.js learning notes [VII]
  35. Vue Router根据后台数据加载不同的组件(思考-&gt;实现-&gt;不止于实现)
  36. Vue router loads different components according to background data (thinking - & gt; Implementation - & gt; (more than implementation)
  37. 【JQuery框架,Java编程教程视频下载
  38. [jQuery framework, Java programming tutorial video download
  39. Vue Router根据后台数据加载不同的组件(思考-&gt;实现-&gt;不止于实现)
  40. Vue router loads different components according to background data (thinking - & gt; Implementation - & gt; (more than implementation)
  41. 【Vue,阿里P8大佬亲自教你
  42. 【Vue基础知识总结 5,字节跳动算法工程师面试经验
  43. [Vue, Ali P8 teaches you personally
  44. [Vue basic knowledge summary 5. Interview experience of byte beating Algorithm Engineer
  45. 【问题记录】- 谷歌浏览器 Html生成PDF
  46. [problem record] - PDF generated by Google browser HTML
  47. 【问题记录】- 谷歌浏览器 Html生成PDF
  48. [problem record] - PDF generated by Google browser HTML
  49. 【JavaScript】查漏补缺 —数组中reduce()方法
  50. [JavaScript] leak checking and defect filling - reduce() method in array
  51. 【重识 HTML (3),350道Java面试真题分享
  52. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  53. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  54. [re recognize HTML (3) and share 350 real Java interview questions
  55. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  56. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  57. 【重识 HTML ,nginx面试题阿里
  58. 【重识 HTML (4),ELK原来这么简单
  59. [re recognize HTML, nginx interview questions]
  60. [re recognize HTML (4). Elk is so simple