JavaScript基础

一 JavaScript概述

1.1 JavaScript作用

技术作用
HTML用于页面的搭建
CSS用于页面的美化
javaScript用于与页面交互

1.2 JavaScript历史

  • **起源:**话说在上世纪末1995年,Netscape(网景)公司推出Navigator浏览器。人家公司有追求,不单单能实现静态HTML,人家还想要有动态效果,还想着能去处理表单的验证,不要老是等到后台那边才知道表单输入合不合法,特别在那个年代,一次等待就上分钟,现在我们等上个十秒都想关掉它是不是,嘴边还吐槽着什么破网站。
  • **动手:**有目标就去做,Netscape公司大牛多,Brendan Eich(布兰登·艾奇)据说就用了10天就把JavaScript搞了出来,刚出来时叫LiveScript,为了蹭蹭当红明星Java热度,就改成JavaScript了(瞬间就火了),事实上他们两没啥关系。
  • **竞争:**看到Netscape公司有了js,微软感觉不行啊,我的IE要被干掉啊,同时也感到js的前途无量,于是参考JavaScript弄了个名为JScript浏览器脚本语言。
  • 标准: Netscape和微软竞争出现的js导致版本的不一致,随着业界的担心,JavaScript的标准化被提上议事日程。ECMA(欧洲计算机制造商协会)组织就去干这事,最后在1997年弄出了ECMAScript作为标准。这里ECMAscript和JavaScript可以看做表达的同一个东西

1.3 JavaScript的特点

js是基于对象(直接使用他提供好的内置对象),直接交给浏览器解析运行的脚本语言,弱类型语言var声明变量

特点JavajavaScript
面向对象完全面向对象的语言:继承、封装、多态基于对象的语言,不完全符合面向对象的思想
运行方式编译型,运行过程需要生成字节码文件解释型语言,不会生成中间文件,解释一定行数,再执行。
跨平台安装了JVM就可以运行在不同的操作系统中只要有浏览器的地方就可以运行
大小写区分大小写区分大小写
数据类型强类型语言,不同的数据类型有严格区分(java11版本消防js var)弱类型语言,不同类型的数据可以直接赋值给同一个变量。

1.4 JavaScript的语法组成

组成部分作用
ECMA Script构成了JS核心的语法基础
BOMBrowser Object Model 浏览器对象模型,用来操作浏览器上的对象
DOMDocument Object Model 文档对象模型,用来操作网页中的元素

二 JavaScript基础语法

2.1 html与js结合方式

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>01_html与js结合方式</title>
    <!--type="text/javascript" 告诉浏览器解析此标签的类型为js,可以省略不写-->
    <script type="text/javascript">
        document.write('<h3>你好,传智播客</h3>');
    </script>
    <script src="../js/myjs.js">
        document.write('<h3>我不会被加载</h3>');
    </script>
</head>
<body>
<!--
    html与js结合方式有二种
        1)内部脚本
            使用script标签,在标签体内编写js代码
        2)外部引入
            使用script标签,需要src属性引入外部js文件

        注意:
            1)script标签可以在页面的任意位置使用,推荐放在body下方【绝大多数script按照此规则】
            2)script标签如果通过src属性引入了外部文件,那么在标签体内的js代码将不会加载
            3)script标签可以在页面出现多次,依次被加载

-->
</body>
<script>
    document.write('<h3>我是在body下方的输入的内容</h3>');
</script>
</html>

2.2 js变量的定义

java是强类型语言,注重变量的定义,所以在java中定义变量类型的方式如下

// 整型
int i = 1314;
// 浮点型
double d = 521.1314;
// 字符型
char c ='c';
// 字符串型
String str = "用心做教育";
//布尔型
boolean b = true;

js是弱类型语言,不注重变量的定义,所以在js中定义变量的类型方式如下

<script type="text/javascript">
    // 整型
    var i = 521;
    // 浮点型
    var d = 521.1314;
    // 字符
    // 在js中,没有字符型,只有字符串可以使用 单引号和双引号
    var c = 'c';
    // 字符串
    var str = "用心做教育";
    // 布尔型
    // 在ecmascript 6 之前所有变量声明都是var,可以省略不写   (let const)
    b = true;
</script>

2.3 js数据类型

js与java一样,数据类型也分为基本数据类型(原始数据类型)和引用数据类型

a)原始数据类型
number:数值类型(整型和浮点型)
string:字符串型(字符和字符串)
boolean:布尔型
null:空值 例如:var a = null; 引用数据类型的占位符
undefined:未定义 例如 var a;
b)引用数据类型

js与java一样,使用new关键字来创建对象【js基于对象,使用它内置的对象】

// 创建一个上帝对象
var obj = new Object();
// 创建一个日期对象
var date = new Date();
c)typeof操作符

作用:查询变量的 数据类型

格式:typeof(变量) | typeof 变量

<script type="text/javascript">
    // 整型
    var i = 521;
    // 补充知识点,使用浏览器的控制台
    //system.out.println() ===== console.log();
    console.log("整型:" + typeof i);
    // 浮点型
    var d = 521.1314;
    console.log("浮点型:" + typeof d);
    // 字符
    var c = 'ccc';
    console.log("字符:" + typeof c);
    // 字符串
    var str = "用心做教育";
    console.log("字符串:" + typeof str);
    // 布尔型
    b = true;
    console.log("布尔型:" + typeof(b));
    // 空值  是引用数据类型的占位符 ==== object
    var n = null;
    console.log("空值:" + typeof(n));
    // 未定义
    var u;
    console.log("未定义:" + typeof(u));
    // 引用数据类型
    // 补充知识点,我们js变量可以重复定义
    u = new Date();
    // 补充知识点:代码结束以分号结尾,js可以省略不写,建议写上
    console.log("引用数据类型:" + typeof(u));
</script>

2.4 js运算符

js与java的运算符一样,什么算数运算符、赋值运算符、逻辑运算符等等,不用把这些运算符都记住,写程序时自然会用就OK。

a)算术运算符+ - * / % ++ --

b)赋值运算符= += -= *= /=

c)比较运算符> < == === != !==

d)逻辑运算符&& || !

e)三目(三元)运算符条件表达式?为真:为假

下面说几个与java不一样的js运算符:

<script type="text/javascript">
    // 算术运算符
    // 在js中,数值可以与字符串进行数学运算(底层转换了),+号还是字符串拼接
    var a = 10.00; // 整型
    var b = '3'; // 字符串
    console.log(a + b); // 字符串拼接
    console.log(a - b);
    console.log(a * b);
    console.log(a / b); // 包含小数位

    // 比较运算符 == ===
    var c = '10.00';
    console.log(a == c); // true  判断的是数据的内容(底层转换了)
    console.log(a === c); // false 恒等 判断类型和数据完全相同才会返回true

    // != !==
    console.log(a != c);// 判断内容不等   10 = 10
    console.log(a !== c);// 先判断类型
</script>

2.5 流程控制语句

在高级语言中有三种结构组成:顺序、分支(选择)、循环

a)if判断
if(条件表达式){
    // 执行代码
}else if(条件表达式){
    // ...
}else{
    // ...
}
<script type="text/javascript">
    /*
    * 条件表达式
    *   数值类型: 非0为真
    *   字符串类型 非空串为真
    *   变量 null 或 undefined 都为假
    * */
    // var flag = true;
    // var flag = -1;
    // var flag = " ";
    var flag;
    // if判断
    if (flag) {
        document.write('<h3>为真</h3>');
    } else {
        document.write('<h3>为假</h3>');
    }
</script>
b)循环
// for
for(var i = 0; i <lenght; i ++){
    
}
// while
while(条件表达式){
    
}
// do...while
do{
    
}while(条件表达式);

continue:跳出本次循环

break:跳出整个循环

<script type="text/javascript">
    // for循环
    for (var i = 0; i < 5; i++) {
        // document.write(i);
        // /n 空格
        document.writeln(i + "<br/>")
    }
    // 补充一个知识点:var声明的都是全局变量
    console.log(i);
    // 补充知识点:es6 提供新的变量声明 let
    for (let j = 0; j < 5; j++) {
        // document.write(i);
        // /n 空格
        document.writeln(j + "<br/>")
    }
    // j is not defined
    console.log(j);
</script>

2.6 案例:九九乘法表

需求

使用js控制表格输出九九乘法表

<style>
    table{
        margin: auto;
        border-collapse: collapse;
    }
    td{
        padding: 5px;
    }
</style>
<script>
    document.write("<table border='1'>");
    document.write('<caption>九九乘法表</caption>');
    for (var i = 1;i < 10;i++){
        document.write("<tr>");
        for (var j = 1;j <= i;j++){
            document.write("<td>"+i+"*"+j+"="+i*j+"</td>")
        }
        document.write("</tr>")
    }
    document.write("</table>")
</script>

2.7 在浏览器中调试

2.8 函数使用

前端的主要业务逻辑都会放在函数中编写

a)普通函数
// 格式
function 函数名(参数列表){
    // js代码
    [return 返回值;]
}
<script type="text/javascript">
    // 普通函数  二个数相加的和
    function sum(a, b) {
        return a + b;
    }

    // 在js中,没有方法重载的概念,重名的函数,后者会覆盖前者
    // 三个数相加的和
    /*
    *  dos 直接调用main给他传递参数
    * main([] args){
    *   获取当前方法参数列表
    * }
    * */
    function sum(a, b, c) {
        // 函数中提供了一个内置对象 arguments,获取参数列表 数组对象
        console.log("参数列表对象:" + arguments);
        console.log("a:" + arguments[0]);
        console.log("b:" + arguments[1]);
        console.log("c:" + arguments[2]);
        return a + b + c;
    }

    // NaN not a number 这不是一个数
    console.log(sum(5, 10, 15));
</script>
b)匿名函数
// 格式
var fun = function (参数列表){
    [return 返回值;]
}
<script type="text/javascript">
    // 匿名函数
    var fun = function (name) {
        // 补充知识点  bom对象  警告框
        window.alert("你好:" + name);
    }
    fun("森森");
</script>
c)变量作用域
<script type="text/javascript">
    /*
    * 全局变量
    *   特点:范围在整个页面
    * 局部变量
    *   特点:函数执行完毕,变量销毁
    *   补充知识点:如果在函数内没有使用var声明变量,那么自动为全局变量
    *
    * */

    var a = 5;

    function fun() {
        var b = 10;
        console.log("我是方法内的局部变量B:" + b);
        c = 15;
        console.log("我是方法内的未声明变量C:" + c);
    }

    fun();
    //  b is not defined
    // console.log("我是方法外的局部变量B:" + b);
    console.log("我是方法外的未声明变量C:" + c);
</script>

2.9 案例:轮播图

需求

实现每过3秒中切换一张图片的效果,一共5张图片,当显示到最后1张的时候,再次显示第1张

技术分析

<script>
    // 注意:在head中编写 js  浏览器的加载顺序 自上而下
    /*
    * 1)获取img标签 dom对象  元素
    *   格式:document.getElementById("")
    *
    * 2)创建js定时器,执行函数
    *   格式:
    *       window.setInterval('函数名()',间隔时间); 单位毫秒
    *              setInterval(函数名,间隔时间); 单位毫秒
    * */
    var img = document.getElementById("img");
    var n = 1;
    function change() {
        img.src="img/"+ n++ +".jpg";
        if (n == 5){
            n = 0;
        }
    }
    setInterval('change()',1000);
</script>

三 JavaScript事件

3.1 作用

js通过事件来监听用户行为,结合函数完成页面互动效果

3.2 常见事件

属性描述
onblur元素失去焦点
onfocus元素获得焦点
onchange用户改变域的内容
onclick鼠标点击某个对象
ondblclick鼠标双击某个对象
onkeydown某个键盘的键被按下nnn
onkeyup某个键盘的键被松开
onload某个页面或图像被完成加载
onmousedown某个鼠标按键被按下
onmouseout鼠标从某元素移开
onmouseover鼠标被移到某元素之上
onmouseup某个鼠标按键被松开
onsubmit提交按钮被点击

zz3.3 事件注册方式

简单来说事件如何绑定函数

<body>
<input type="button" value="使用普通函数" onclick="show()"> <br>
<input type="button" value="使用匿名函数" id="myBtn">
</body>
<!--
    我就以 单击举例 onclick  结合按钮

    // 1)普通函数

    // 2)匿名函数
-->
<script type="text/javascript">
    function show() {
        alert('我是普通函数触发的。。。');
    }

    // 匿名函数 可以是 html标签与js代码进行分离 ,解耦
    // 获取按钮dom对象
    document.getElementById('myBtn').onclick = function () {
        alert("我是匿名函数触发的")
    }
</script>

3.4 案例:简单交互

需求

完成html标签的事件注册,与用户产生交互

四 JavaScript内置对象

4.1 数组对象

<script type="text/javascript">
    /*
    * 数组对象
    *   格式:
    *       1) var arr = [元素1,元素2...]; 【推荐】
    *       2) var arr = new Array();
    *       3) var arr = new Array(长度);
    *       4) var arr = new Array(元素1,元素2...);
    *
    *
    *      注意:
    *       在js中,数组的长度可以变化
    *       在js中,数组元素的类型任意
    * */

    var arr1 = ['小仓', '波多'];
    console.log(arr1);
    var arr2 = new Array();
    arr2 = ["酒井", "火舞"];
    console.log(arr2);
    var arr3 = new Array(2);
    arr3 = ['小泽', "冲田", 1314];
    console.log(arr3);
    var arr4 = new Array('貂蝉', '西施', '杨玉环', '王昭君');
    console.log(arr4);

    /*
    * 在js中,数组内置很多方法,你发挥很像java的list集合
    *   concat() 连接数组
    *   join(分隔符) 与split功能相反,使用分隔符把数组拼接成一个字符串
    *   reverse() 反转
    *   sort() 排序
    *       字符串按照字母排序
    *       数值需要指定排序类型 降序、升序
    *       sort(function(a,b){
    *           return a-b; 升序
    *           return b-a; 降序
    *       });
    * */
    console.log(arr1.concat(arr2));
    console.log(arr3.join("-"));
    console.log(arr4.reverse());

    var arr5 = ['c', "d", "a"];
    console.log(arr5.sort());

    var arr6 = [9, 3, 1, 7, 11];
    console.log(arr6.sort(function (a, b) { return b-a; }));
</script>

4.2 日期对象

<script type="text/javascript">
    // 日期对象  获取当前系统时间
    let date = new Date();
    console.log(date);
    // 内置方法
    console.log(date.toLocaleString());// 显示系统本地时间
    console.log(date.getFullYear());// 年份
    console.log(date.getMonth() + 1);// 月份 0-11
    console.log(date.getDate());// 获取当前日期
    console.log(date.getDay());// 获取今天是周几 0(周日)-6
    console.log(date.getTime()); // 获取1970-1-1 至今毫秒值

</script>

4.3 全局对象

不需要new关键字,可以直接使用,类似于java工具类

<script type="text/javascript">
    /*
    * 字符串转换数值类型
    *     parseInt(); 字符串转换成整型
    *     parseFload(); 字符串转换成浮点型
    *     补充:从字符第一个开转换,当遇到数值型字符停止转换
    *     应用场景   img '300px'  '500px'
    *
    *   NaN not a number 这不是一个数
    *
    *   在js中  isNaN(); 判断字符串如果为非数值类型返回 true  为数值类型 返回false
    *       应用场景,在转换之前先判断字符
    * */

    var a = '5a21.a13a4';
    var b = "a500px";
    console.log(parseInt(b)); // 521
    console.log(parseFloat(b)); // 521.1314
    console.log(isNaN(b));

    /*
    * 编码与解码
    *   浏览器发送数据给服务器 -- 中文 编码
    *   encodeURI(中文)
    *   浏览器接收服务器数据 -- 中文 解码
    *   decodeURI(编码后的中文)
    *
    * */

    var str = "班长暗恋隔壁班班花。。。";
    console.log(str);
    // 编码
    let encodeStr = encodeURI(str);
    console.log(encodeStr);
    // 解码
    console.log(decodeURI(encodeStr));
</script>

复习

  • 能够说出五种原始的数据类型
  • 能够使用JS中常用的运算符
  • 能够使用JS中的流程控制语句
  • 能够在JS中定义命名函数和匿名函数
  • 能够使用JS中常用的事件
  • 能够掌握事件的注册方式
  • 能够使用数组及其常用的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值