JavaScript 基础

Posted dBevil

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript 基础相关的知识,希望对你有一定的参考价值。

javascript简介

JavaScript 是一种专为与网页交互而设计的脚本语言,由下列三个不同的部分组成:

  1.  ECMAScript,由 ECMA-262 定义,提供核心语言功能;
  2.  文档对象模型(DOM),提供访问和操作网页内容的方法和接口;
  3.  浏览器对象模型(BOM),提供与浏览器交互的方法和接口。

JavaScript 的这三个组成部分,在当前五个主要浏览器(IE、Firefox、Chrome、Safari 和 Opera)中
都得到了不同程度的支持。其中,所有浏览器对 ECMAScript 第 3 版的支持大体上都还不错,而对
ECMAScript 5 的支持程度越来越高,但对 DOM 的支持则彼此相差比较多。对已经正式纳入 html5 标
准的 BOM来说,尽管各浏览器都实现了某些众所周知的共同特性,但其他特性还是会因浏览器而异。

在HTML中使用JavaScript

把 JavaScript 插入到 HTML 页面中要使用 <script> 元素。使用这个元素可以把 JavaScript 嵌入到
HTML页面中,让脚本与标记混合在一起;也可以包含外部的 JavaScript文件。而我们需要注意的地方有:

  1. 在包含外部 JavaScript 文件时,必须将 src 属性设置为指向相应文件的 URL。而这个文件既可以是与包含它的页面位于同一个服务器上的文件,也可以是其他任何域中的文件。
  2. 所有 <script> 元素都会按照它们在页面中出现的先后顺序依次被解析。在不使用 defer 和async 属性的情况下,只有在解析完前面 <script> 元素中的代码之后,才会开始解析后面<script> 元素中的代码。
  3.  由于浏览器会先解析完不使用 defer 属性的 <script> 元素中的代码,然后再解析后面的内容,所以一般应该把 <script> 元素放在页面最后,即主要内容后面, </body> 标签前面。
  4. 使用 defer 属性可以让脚本在文档完全呈现之后再执行。延迟脚本总是按照指定它们的顺序执行。
  5. 使用 async 属性可以表示当前脚本不必等待其他脚本,也不必阻塞文档呈现。不能保证异步脚本按照它们在页面中出现的顺序执行。
  6. 使用 <noscript> 元素可以指定在不支持脚本的浏览器中显示的替代内容。但在启用了脚本的情况下,浏览器不会显示 <noscript> 元素中的任何内容。

 

注释

  • 单行注释  //
  • 多行注释  /**/

引入脚本

  • 在HTML文件中既可以通过外部引入js脚本,也可以在内部直接添加脚本
  • 外部引入(文件路径和类型,可以放在head中,也可以放在body中(最好在body最后)):<script src="js/jsDemo01.js" type="text/javascript"></script>

内部定义:

<script type="text/javascript">
    window.onload = function(){
        document.write("<h1>HelloWorld</h1>");
        //alert("HelloWorld");
    }
</script>

 变量:

  • 数据类型
    /**
     * JavaScript属于弱数据类型的语言,声明变量的时候不需要声明数据类型,也可以不用赋初始值  
     * ;可以省略
     * 严格区分大小写
     * 数据类型
     *         数值型:number
     *         字符型:string
     *         布尔型:boolean
     *         未定义:undefined
     *         对象型:object
    */
  • 通过var或let声明变量,与Java不同,
  • 可以通过typeof(var v)函数获得变量的类型

流程控制及循环:

  • for循环、do--while、while--do、for--in
  • switch--case、if--else
  • 都和Java差不多

函数:

  • 常用系统函数:

 

//parseInt();用于将字符串转换为整型数字,会自动去掉小数点之后的值
                    var par = parseInt(str);
                
//parseFloat();用于将字符型转为浮点型
                var par1 = parseFloat(str);
                
//isNaN();用于检查参数是否是一个非数字,如果是数字就返回false
                //alert(isNaN(111));
                
//setInterval();每隔一段时间执行一次
                setInterval(function() {
                    document.write("hello" + "<br />");
                }, 1000);
                
//setTimeout();隔一段时间之后再开始执行一次,执行完就结束
                setTimeout(function() {
                    document.write("hello000000" + "<br />");
                }, 2000);

 

  • 自定义函数(有参、无参、返回但是不需要声明返回值):  
//求0--num之间的和,在定义参数时不需要声明数据类型,
function fun02(num1,num2){}
//调用函数时实际出入的参数与函数本身的参数个数、类型没关系,控制台不会报错
  • window对象:

 

---window对象---
 //获取浏览器的宽高,并赋值
var width = window.screen.width;
var height = window.screen.height;

 //打开窗口
var win;
function openW(){
   win = window.open();
}
            
//获取键盘码事件
e.keyCode

 

  •  日期时间相关的函数
---时钟特效---
  //获取系统的时间
  var time = new Date();
  //获取年份。。。。。。。
  var year = time.getFullYear();
  var month = time.getMonth()+1;
  var day = time.getDate();
  var week = time.getDay();
  var hour = time.getHours();
  var minute = time.getMinutes();
  var second = time.getSeconds();
  //在HTML中添加内容
  innerHTML

 

  •  history函数
方法  描述
back()   加载 history 列表中的前一个 URL。

forward()

加载 history 列表中的下一个 URL。
go() 加载 history 列表中的某个具体页面。

 

 

 

 

<!-- 历史中的后一个 -->
<a href="#" onclick="javascript:history.back()">后退</a>
<!-- 历史中的前一个 -->
<a href="#" onclick="javascript:history.forward()">前进</a>

获取对象

  • 获取对象的四种方式
  1. 通过id获取
  2. 通过标签名获取(数组)
  3. 通过类名获取(数组)
  4. 通过name属性获取(数组)
    //通过ID获取DOM对象        document.getElementById(id值)
    var obj = document.getElementById("test");
    //给获得的对象obj绑定一个单击事件
    obj.onclick = function(){
        //innerHTML获取到对象中的所有内容
        alert(obj.innerHTML);
        //innerText只获得文本
    }
    
    //通过标签名获取DOM对象数组
    var objlis = document.getElementsByTagName("li");
    //alert(objlis.length);
    
    //通过class属性获取
    var objli_class = document.getElementsByClassName("test");
    
    
    //通过name属性获取    getElementsByName("name值");
    var obj_name = document.getElementsByName("name")

 

        //通过标签名获取h1
        var h1s = document.getElementsByTagName("h1");
        h1s[0].innerText = "第一个h1标签中的内容";

      //向对象中添加内容
      obj.innerText = obj.textContent + "我从来也不骑";

 

实例1:树形菜单点开、收回

  • 效果:点击后会打开菜单,点击别的之前的菜单会自动收回

  • HTML文件
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>树形菜单</title>
        <script src="../js/树形菜单.js" type="text/javascript" charset="utf-8"></script>
        <link rel="stylesheet" type="text/css" href="../css/树形菜单.css"/>
    </head>
    <body>
        <ul>
            <li id="lm01" class="lm">
                <h3>栏目1</h3>
                <div class="nr">
                    <p>内容1</p>
                    <p>内容1</p>
                    <p>内容1</p>
                </div>
            </li>

            <li id="lm02" class="lm">
                <h3>栏目2</h3>
                <div class="nr">
                    <p>内容2</p>
                    <p>内容2</p>
                    <p>内容2</p>
                </div>

            </li>

            <li id="lm03" class="lm">
                <h3>栏目3</h3>
                <div class="nr">
                    <p>内容3</p>
                    <p>内容3</p>
                    <p>内容3</p>
                </div>

            </li>
            <li id="lm01" class="lm">
                <h3>栏目4</h3>
                <div class="nr">
                    <p>内容1</p>
                    <p>内容1</p>
                    <p>内容1</p>
                </div>

            </li>

            <li id="lm02" class="lm">
                <h3>栏目5</h3>
                <div class="nr">
                    <p>内容2</p>
                    <p>内容2</p>
                    <p>内容2</p>
                </div>

            </li>

            <li id="lm03" class="lm">
                <h3>栏目6</h3>
                <div class="nr">
                    <p>内容3</p>
                    <p>内容3</p>
                    <p>内容3</p>
                </div>

            </li>
            <li id="lm01" class="lm">
                <h3>栏目7</h3>
                <div class="nr">
                    <p>内容1</p>
                    <p>内容1</p>
                    <p>内容1</p>
                </div>

            </li>

            <li id="lm02" class="lm">
                <h3>栏目8</h3>
                <div class="nr">
                    <p>内容2</p>
                    <p>内容2</p>
                    <p>内容2</p>
                </div>

            </li>

            <li id="lm03" class="lm">
                <h3>栏目9</h3>
                <div class="nr">
                    <p>内容3</p>
                    <p>内容3</p>
                    <p>内容3</p>
                </div>

            </li>
        </ul>
    </body>
</html>
  • css文件
* {
    padding: 0px;
    margin: 0px;
}

li {
    list-style: none;
    width: 300px;
    text-align: center;
    color: red;
    /* 背景渐变色 */
    background-image: linear-gradient(90deg, pink, aqua);
}

p {
    color: #FFFFFF;
}

h3 {
    //鼠标手势变为手型
    cursor: pointer;
}

.nr {
    display: none;
}
  • JavaScript文件
window.onload = test02;

/*第二种方式*/
function test02() {
    //1、获取所有栏目
    var lms = document.getElementsByClassName("lm");

    //2、给所有的栏目绑定单击事件
    for (var i = 0; i < lms.length; i++) {
        //bind(i);
        bindfor(i);

    }
}

/*其他收回*/
function bindfor(index) {
    //获取所有栏目
    var lms = document.getElementsByClassName("lm");
    var nrs = document.getElementsByClassName("nr");
    //给栏目绑定单击事件
    lms[index].onclick = function(){
        for (var j = 0;j < nrs.length;j ++) {
            if (index == j) {
                if (nrs[index].style.display != "block") {
                    nrs[index].style.display = "block";
                } else{
                    nrs[j].style.display = "none";
                }
                
            } else{
                nrs[j].style.display = "none";
            }
        }
    }
}

function bind(index) {
    //获取所有栏目
    var lms = document.getElementsByClassName("lm");
    lms[index].onclick = function() {
        //alert(index);

        var nrs = document.getElementsByClassName("nr");
        if (nrs[index].style.display != "block") {
            nrs[index].style.display = "block";
        } else {
            nrs[index].style.display = "none";
        }
    }
}

 

 

案例2:tab切换

  • 效果图:点击后会切换到别的内容,按钮也会变颜色,当点击其他按钮,之前的按钮会恢复到之前的状态

  • HTML、css、js代码
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="../js/tab切换.js" type="text/javascript" charset="utf-8"></script>
        <link rel="stylesheet" type="text/css" href="../css/tab切换.css" />
    </head>
    <body>
        <div id="con">
            <div id="top">
                <div class="btn">
                    按钮1
                </div>
                <div class="btn">
                    按钮2
                </div>
                <div class="btn">
                    按钮3
                </div>
            </div>
            <div id="bottom">
                <div class="content">内容1</div>
                <div class="content">内容2</div>
                <div class="content">内容3</div>
            </div>
        </div>
    </body>
</html>
*{
    margin: 0px;
    padding: 0px;
}

#con{
    width: 600px;
    height: 400px;
    margin: auto;
    border: 1px solid red;
}

#top div{
    height: 100px;
    width: 198px;
    border: 1px solid yellow;
    text-align: center;
    line-height: 100px;
    background-color: pink;
    float: left;
    cursor:pointer;
}

#bottom{
    clear: both;
    
    
}
#bottom div{
    height: 298px;
    background: aquamarine;
    color: red;
    font-size: 66px;
    text-align: center;
    line-height: 298px;
}

#bottom div:nth-child(2){
    display: none;
}
#bottom div:nth-child(3){
    display: none;
}
//当窗口加载完成时执行函数
window.onload = test02;

function test02() {
    //1、获取按钮
    var btns = document.getElementsByClassName("btn");
    //2、遍历按钮
    for (var i = 0; i < btns.length; i++) {
        //调用方法并将i传递给方法
        change(i);
    }
}

function change(index) {
    //1、获取按钮
    var btns = document.getElementsByClassName("btn");
    //2、 获取内容
    var cons = document.getElementsByClassName("content");
    //为每个按钮添加点击事件
    btns[index].onclick = function() {
        //遍历按钮的个数
        for (var j = 0; j < btns.length; j++) {
            //如果点击的按钮相等
            if (index == j) {
                //内容显示出来,按钮颜色变红色
                cons[index].style.display = "block";
                this.style.backgroundColor = "red";
            } else {
                //如果不想等,内容不显示,按钮颜色不变化
                cons[j].style.display = "none";
                btns[j].style.backgroundColor = "pink";
            }
            
        }
    }
}

 

案例3:check全选、反选

  • 效果图:当点击全选时,下面的按钮全选中,当点击反选时,下面的多选按钮状态和之前的相反

  • 三种代码
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="../js/全选反选.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <input type="checkbox" id="all" />全选
        <input type="checkbox" id="fan" />反选
        <br/><br/>
        <input type="checkbox" name="hob" /><input type="checkbox" name="hob" /><input type="checkbox" name="hob" /><input type="checkbox" name="hob" /><input type="checkbox" name="hob" />学习
        <input type="checkbox" name="hob" />电影
        <input type="checkbox" name="hob" />音乐
        <input type="checkbox" name="hob" />运动
        <input type="checkbox" name="hob" />阅读
        <input type="checkbox" name="hob" />睡觉
    </body>
</html>
window.onload = function(){
    //获取全选按钮
    var all = document.getElementById("all");
    //获取反选按钮
    var fan = document.getElementById("fan");
    //获取爱好
    var hobs = document.getElementsByName("hob");
    
    //给全选按钮绑定单机时间
    all.onclick = function(){
        var f = this.checked;
        for (var i = 0;i <hobs.length;i ++) {
            //让爱好的选中状态和全选按钮一致
            hobs[i].checked = this.checked;
        }
    }
    
    //给全选按钮绑定单机时间
    fan.onclick = function(){
        for (var i = 0;i <hobs.length;i ++) {
            //让爱好的选中状态和反选按钮一致
            //!取反,与选中的对象相反
            hobs[i].checked = !hobs[i].checked;
        }
    }
}

 

 

以上是关于JavaScript 基础的主要内容,如果未能解决你的问题,请参考以下文章

30秒就能看懂的JavaScript 代码片段

Yarn: 一个新的JavaScript模块管理器

常用Javascript代码片段集锦

48个值得掌握的JavaScript代码片段(上)

如何将此 JavaScript 代码片段翻译成 Parenscript?

javascript 代码片段