第四周预习-JavaScript基础语法

目录

一、JavaScript简介

①JavaScript的历史

②什么是JavaScript?

③JavaScript有什么作用?

④JavaScript的组成

二、JS引入方式

①行内式JS

②内嵌式JS

③外部JS文件

三、JS语法

①加注释

②输入输出语句

③变量

1.什么是变量?

2.声明变量,赋值并输出 

3.变量的初始化

 4.更新变量

④运算符

⑤数据类型

1.一些特性们

 2.数据类型的分类

3.数据类型转换

⑥数组 

1.概念

2.语法

 ⑦对象

1.概念

2.创建对象的三种方式

四、函数

①概念

②函数的使用

③形参实参

④关键字new 

⑤同步和异步


一、JavaScript简介

①JavaScript的历史

  • JavaScript最初由Netscape的Brendan Eich设计。
  • Brendan Eich在1995年仅用10天完成了JavaScript的设计。
  • 最初将其脚本语言命名为LiveScript,后来Netscape在与Sun合作之后将其改名为JavaScript。
  • 与Java语法上有类似之处,一些名称和命名规范也借自Java,但JavaScript的主要设计原则源自Self和Scheme。

②什么是JavaScript?

  • JavaScript是世界上最流行的语言之一,是一种运行在客户端的脚本语言。
  • 脚本语言:不需要编译,运行过程中由于JS解释器(JS引擎)逐行来进行解释并执行。
  • 现在也可以基于Node.js技术进行服务器端编程。

③JavaScript有什么作用?

表单动态校验(JS产生的最终目的)
网页特效服务端开发(Node.js)
桌面程序(Electron)APP(Cordova)
控制硬件-物联网(Ruff)游戏开发(cocos2d-js)
  • HTML,CSS和JS之间有什么联系?

 HTML——决定结构和内容     CSS——决定外观样式     JS——决定功能(业务逻辑、页面控制)

④JavaScript的组成

  1. ECMAScript,描述了该语言的语法和基本对象。
  2. DOM(文档对象模型),描述处理网页内容的方法和接口。 
  3. BOM(浏览器对象模型),描述与浏览器进行交互的方法和接口。

二、JS引入方式

①行内式JS

样式范例如下~

<input type="button" value="戳我查看!" onclick="alert('Hello World!')"/>
  • 可用于将单行/少量代码写于HTML标签的事件属性中(以on开头的属性)。
  • HTML中推荐使用双引号,在JS中推荐使用单引号
  • 可读性差,引号易错,不常使用。

显示效果如下~

②内嵌式JS

样式范例如下~

<script>
    alert('道路千万条,安全第一条。行车不规范,亲友两行泪。');
</script>
  • 可以在HTML文档中任意地方放置任意数量的标签。
  • 一般把脚本 < body >置于元素的底部,可改善显示速度——因为浏览器在加载页面的时候会从上往下进行加载并解析。 我们应该让用户看到页面内容,然后再展示动态的效果。

显示效果如下~

③外部JS文件

样式范例如下~

<script src="content.js"></script>
  •  适用于JS代码较多的情况,利于HTML页面代码结构化,美观方便。
  • 引用外部JS文件的<script>标签中间不能写代码!!!
  • 外部脚本中不能包含<script>标签,直接写JS代码即可。

显示效果如下~

三、JS语法

①加注释

在<script>标签中的加注释方法(在vscode中可自行更改为自己适应的方式!)

  1. 单行注释:Ctrl + / 
  2. 多行注释:Shift + Alt + a

效果如图~

②输入输出语句

方法说明归属
alert(msg)浏览器弹出警示框浏览器
console.log(msg)浏览器控制台打印输出信息浏览器
prompt(info)浏览器弹出输入框,用户可输入浏览器

使用示范样例

<!DOCTYPE html>
<head>
    <title>预习No.4</title>
    <meta charset="utf-8">
    <script>
        prompt('请在这里输入信息');
        alert('信息录入成功!')
        console.log('我是程序员能看到的');
    </script>
</head>
<body>
    
</body>
</html>

效果如下~

(开发人员工具,按F12或在“更多工具”中打开) 

③变量

1.什么是变量?

  • 变量是用于存放数据的容器,我们通过变量名来获取数据,修改数据。
  • 变量是程序在内存中申请的一块用来存放数据的空间。
  • 与酒店类比,一个变量就是酒店的一个房间,变量名即为房号,所存储的数据即为入住者。
  • 其中,变量名由数字、字母、下划线_和美元符号$组成,严格区分大小写,不以数字开头,不能是关键字,保留字(如var,for),遵守驼峰命名法。

2.声明变量,赋值并输出 

   <script>
        var num;
        num=100.05;
        console.log(num);
    </script>

JS关键字:var——用于声明变量,使用后计算机会自动为变量分配内存空间。

运行此段代码,在浏览器的开发者工具中便可看到100.5的输出值。

若要声明多个变量?

书写方式如下~

var mingzi='蛋仔',
    word='鸡蛋鸭蛋荷包蛋',
    num=6;

 只需写一个var,多个变量名间用逗号隔开。

3.变量的初始化

    var content='一段文字balabala';
    console.log(content);

变量的初始化——声明一个变量的同时并为其赋值。

这两段效果如下~

 4.更新变量

    <script>
        var word='鸡蛋鸭蛋荷包蛋';
        console.log(word);
        word='咔咔我的小揪揪';
        console.log(word);
    </script>

一个变量被重新赋值后,其原有的值会被覆盖,变量的值将以最后一次赋的值为准。

效果如下

④运算符

又名操作符,用于实现赋值,比较和执行算术运算等功能的符号。

算术运算符

  • 执行最简单的算术运算—— + 加;- 减;* 乘;/ 除;% 取模运算
  • 避免使用浮点数,在算数运算中会有问题!
  • 不能用浮点数直接比较来判定是否相等

递增和递减运算符 

  • 递增(++)递减(--)
  • 在变量前——前置递增、前置递减(先运算后返回)
  • 在变量后——后置递增、后置递减(先返回原值后运算)
  • 必须配合变量使用

 比较运算符(关系运算符)

  • 两个数据进行比较时用,返回布尔值
  • <(小于)>(大于)<=(小于等于)>=(大于等于)
  • ==(判等号)!=(不等于)===  !==(全等,要求 值 和 数据类型 都一致)

逻辑运算符 

  • &&(与):同真则真,一假即假  console.log(3>5&&3>2);//false
  • ||(或):同假则假,一真即真  console.log(3>5||3>2);//true
  • !(非):取反
  • 进行布尔值运算的运算符,返回值也是布尔值
  • 用于多个条件的判断

逻辑与短路运算

  • 当左边的表达式以及可以确定结果时,就不再进行右边表达式的运算了
  • 表达式1为真返回表达式2,否则返回表达式1
  • 空格or否定为假,其余为真

逻辑或短路运算

  •  表达式1为真返回表达式1,否则返回表达式2

赋值运算符 

  •  =(直接赋值)
  • +=,-=(加or减一个数后再赋值)
  • *=,/=,%=(乘or除or取模后再赋值)

优先级 

⑤数据类型

1.一些特性们

JavaScript是一种弱类型语言(动态语言)!

这意味着不必提前声明变量的类型,在程序的运行过程中会根据等号右边的值来自动确定其类型

var num;  //什么类型不知道呀

var age = 18;  //数字型

var word='Hello World!';  //字符串型

 JavaScript拥有动态类型

这意味着相同变量可用作不同类型。(变量的类型可以变化)

var abc = 11;  //此时abc为数字型

var abc = 'word';  // 此时abc为字符串型

 2.数据类型的分类

  1. 简单数据类型:(Number,String,Boolean,Undefined,Null)
  2. 复杂数据类型:(Object)对象

 数字型 

1.可储存整数或小数。

2.数字型有进制表现,最常见的有二进制,八进制,十进制,十六进制。

  • 八进制如何表示?——数字前加个0(如010=8),输出时会转换成十进制。
  • 十六进制如何表示?——数字前面加0x(如0xa=10)。

3.数字型的范围 

  • 最大值如何表示?—— Number.MAX_VALUE
  • 最小值如何表示?—— Number.MIN_VALUE
  • 数值如下

 4.特殊值

  • Infinity:无穷大,大于任何数值。

  • -Infinity:负无穷,小于任何数值。

  • NaN:Not a number,一个非数值(比如console.log('abc'-10)输出结果会为NaN)。

  • isNaN():用于判断一个变量是否为非数字型(是数字—false,不是数字—true)

 字符串型 

1.可以是引号中的任意文本,可以使用单引号' '或者双引号" "(JS中推荐使用单引号)。

2.嵌套效果——外双内单or外单内双(两个相同种类的引号不可嵌套,单双引号搭配会报错)。

3.字符串转义符(以\开头)

 4.字符串长度:构成它的字符数量,通过length属性可以获取。

用法——console.log(str.length);

5.字符串拼接 :多个字符串用+拼接。

即 字符串+任何类型(会被转换成字符串)=拼接后的新字符串

例——console.log('abc'+10); (输出abc10)

注意: 若在字符串中加变量,要通过+与字符串连接,而不是把变量放进字符串里!

 布尔型 

1.两个值:true为真,false为假。

2.与数字型相加时:true值为1,false值为0。 

console.log(true+1);—2   console.log(false+1); —1

 Undefined 

1. 如果一个变量声明了却未赋值,则是undefined未定义数据类型。

2.可手动定义一个元素为未定义数据类型(var abc = undefined;) 

与字符串,数字相加:

 Null 

 空值

与字符串,数字相加:

 如何获取变量类型?——typeof 变量名

例如: 

var word = 'ppap';

console.log(typeof word); //boolean

 var word = null;

console.log(typeof word); //object

注:prompt取来的值为字符串型的!

3.数据类型转换

转换为字符串

  1. toString()——var num = 1;alert(num.toString()) ;
  2. String()强制转换——var num = 1;alert(String(num)) ;
  3. 加号拼接字符串(隐式转换)——var num = 1;alert(num+‘字符串balabala’) ;

转换为数字型 

  1. parseInt(String) ——字符型转整数数值型——parseInt(‘2.71828’);// 2
  2. parseFloat(String)——字符型转浮点数数值型——parseFloat(‘12345’);
  3. 上两个中若有单位px,可去掉单位输出,若第一个字符为字母,输出NaN。
  4. Number()强制转换——字符型转数值型——Number(‘123’);
  5. JS隐式转换(- * /)——用算术运算隐式转换为数值型——‘12’-0

 转换为布尔型

  • Boolean()——其他类型转布尔型—— Boolean(‘true’);
  1. 代表空、否定的值会被转换成false(如“ ,0,NaN,null,undefined”) 
  2. 其余值都会被转换成true

⑥数组 

1.概念

数组是一组数据的集合,其中每个数据被称为元素,在数组中可以存放任意类型的元素。

2.语法

new关键字创建数组——var arr(数组名)= new Array();

数组字面量创建数组——var arr(数组名)= [1,2,3,4,5];

 ⑦对象

1.概念

对象是由属性和方法组成的。JavaScript中几乎所有事物都是对象。

  其中:属性:事物的特性(常用名词)

             方法:事物的行为(常用动词)

2.创建对象的三种方式

1.利用字面量创建对象

        var stu={
            name:'xy',
            age:18,
            sex:'female',
            word:function(){
                alert('Hello World!');
            }
        };

2.利用new Object创建对象

        var stu=new Object();
        stu.name='xy';
        stu.age=18;
        stu.sex='female';
        stu.word=function(){
                alert('Hello World!');
            }

3.利用构造函数创建对象

        function person(name,age,sex){
            this.name=name;
            this.age=age;
            this.sex=sex;
            this.word=function(){
                alert('我叫'+this.name+',今年'+this.age+'岁,性别为'+this.sex);
            }
        }
        var stu=new person('xy',18,'female');

4.对象的调用

        console.log(stu.age);
        console.log(stu['name']);
        stu.word();

四、函数

①概念

封装了一段可被重复调用执行的代码块,通过它可实现大量代码的重复使用。

②函数的使用

先声明后调用 

1.声明

  • 自定义函数方式(命名函数):function 函数名(形参){  } ;
  • 函数表达式方式(匿名函数):var 函数名 = function(形参){   };

 2.调用

  • 函数名();

(使用范例见上“利用构造函数创建对象”)

③形参实参

  • 形参:声明变量时函数名称后面小括号里的参数,是形式上的参数。
  • JS中形参的默认值:undefined。
  • 实参:调用该函数时赋予的实际参数。 
  • JS变量保存在栈内存中,基本数据类型的值也在此储存,值与值间独立存在

④关键字new 

function stu(){

//函数体

var xiaoming = new stu();

利用关键字new创建一个函数,可实例化调用该函数。

  1. 在内存中创建一个新的空对象
  2. 让this指向这个新对象 
  3. 执行构造函数里面的代码,给这个信息对象添加属性和方法
  4. 返回这个新对象(构造函数不需要return)

⑤同步和异步

同步任务

同步任务都在主线程上执行,形成执行线。 

异步任务

 JS的异步是通过回调函数实现的。

异步任务的三种类型

  1. 普通事件:如click,resize等
  2. 资源加载:如load,error等
  3. 定时器:包括setInterval,setTimeout等

课后总结

这次课程说实话没太跟上orz,好多地方都没有预习到,这里是一些补充!

1.行内引入的一些事件(只有行内引入必须结合事件

<开始标签 on+事件类型="js代码"> </结束标签>

  1. blur:失去焦点
  2. change:下拉列表选项中项改变/文本框内容改变
  3. click:鼠标点击
  4. dbclick:鼠标双击
  5. focus:获得焦点
  6. keydown:键盘按下
  7. keyup:键盘弹起
  8. load:页面加载完毕
  9. mousedown:鼠标按下
  10. mouseup:鼠标弹起
  11. mouseover:鼠标经过
  12. mousemove:鼠标移动
  13. mouseout:鼠标离开
  14. reset:表单重置
  15. select:文本被选择
  16. submit:表单提交

2.变量声明的三种方式!

1.var:存在变量提升,可以多次声明,可以多次赋值,无自身作用域(函数作用域)。

什么是变量提升呢?

当使用var声明一个var变量时,该变量会被提升到作用域的顶端,但是赋值的部分不会提升。 

简言之,在声明一个变量之前就可以输出它,输出值是undefined

2.let:无变量提升,不可多次声明,可以多次赋值,有自身作用域(块状作用域)。

let一般用于循环遍历计数

在函数里使用var声明了一个变量,那么这个变量在整个函数内都是有效的,例如在for循环里用var声明一个变量,在for循环外也是可以使用的。但是let作用域是块状作用域,只在作用域里有效,例如在for循环里用let声明一个变量,在for循环外面是不能被访问的。

3.const:无变量提升,不可多次声明,不可多次赋值,定义一定要赋值,有自身作用域。

const一般用于写在全局作用域做常量

3.弱类型——运算时可以用隐式转换得到正确类型,所有类型都能进行运算。

1.number与string运算:+为连接运算,其余为数值运算

2.number与boolean 运算:boolean转换成number数值运算

3.number与undefined运算:NaN

4.number与null运算:null转换为0,数值运算

5.string与boolean运算

  纯数字字符串——+为连接运算,其余为数值运算

  非纯数字字符串——+为连接运算,其与输出NaN

6.string与undefined运算:+为连接运算,其余输出NaN

7.string与null运算

  纯数字字符串——+为连接运算,其余为数值运算

  非纯数字字符串——+为连接运算,其与输出NaN

1.number和string比较

  纯数字字符串——数值运算

  非纯数字字符串——输出false

2.number和boolean比较:转换为number作比较运算

3.number和undefined比较:输出false

4.number和null比较:null转换为0作比较运算

5.string和boolean比较

  纯数字字符串——转换为数值进行比较

  非纯数字字符串——输出false

6.string和undefined比较:输出false

7.string和null比较

  纯数字字符串——转换为数值进行比较

  非纯数字字符串——输出false

 4.数组的一些应用

修改原数组

  1. push()末尾添加元素
  2. pop()删除最后一个元素,返回该元素值
  3. shift()删除第一个元素,返回该元素值
  4. unshift()在数组头部添加元素,返回该数组长度
  5. sort()对数组元素进行排序
  6. reverse()数组中元素位置颠倒,返回该数组
  7. splice(start,deleteCount?,item1?)通过删除或替换现有元素或原地添加新元素来修改数组,并以数组形式返回被修改内容(没有删除则返回空数组)

不改变原数组

  1. slice(begin?,end?)返回一个新的数组对象,这一对象是一个由begin和end决定的原数组的浅拷贝(包括begin不包括end)
  2. concat()合并两个或多个数组,不改变现有数组但返回新数组
  3. join()将一个数组(or类数组对象)的所有元素连接成一个字符串,返回这个字符串。如果数组只有一个项目,那么将返回该项目而不使用分隔符(默认使用,分隔,如果使用“ ”则所有元素之间都没有任何字符)

 5.字符串

  1. charAt()方法可返回字符串中指定位置的字符
  2. concat()方法用于两个or多个字符串
  3. indexOf()方法可返回某个指定字符串值在字符串中首次出现位置
  4. includes()方法用于判断字符串是否包含指定的子字符串
  5. match()方法可在字符串中检索指定的值,或找到一个或多个正则表达式的匹配,返回数组
  6. repeat()方法看字符串复制的指定次数
  7. replace()方法用于在字符串中用一些字符替换另一些字符。或替换一个正则表达式匹配的子串
  8. replaceAll()方法替换所有
  9. search()方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。返回与指定查找的字符串或者正则表达式相匹配的 String 对象起始位置
  10. slice(start,end)方法提取字符串的某个部分,并以新的字符串返回被提取部分
  11. substring()方法提取字符串中介于两个指定下标之间的字符
  12. split()方法把一个字符串分割成字符串数组
  13. trim()方法用于删除字符串的头尾空白符。空白符包括:空格、制表符 tab、
    换行符等其他空白符

什么是正则表达式?正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。 

6.构造函数创建对象(除使用对象字面量外的定义对象方式)

 使用new关键字调用的函数是构造函数constructor

 构造函数是专门用来创建对象的函数

 使用typeof检查一个对象时,会返回object

7.操作对象

  • 访问属性:使用点访问符(.)
  • 给对象添加属性:对象.属性=属性值;
  • 删除对象属性:delete 对象.属性;
  • 对象属性检测:“属性名”in对象,有返回true
  • object根构造函数:所有对象都直接或间接继承object,都能调用object原型里的方法

8.对象序列化

 1.常规转换

obj.tostring()
默认tostring返回‘[object type]’,type为对象类型,其值可以是object,可重写

 2.转换为json字符串

JSON.stringify(obj)

 3.查询字符串

var qs = require('querystring');//引入node.js模块
qs.stringify(obj)

9.增强 for循环  遍历对象

 语法:for(var 变量 in 对象){undefined}

  • for...in语句  对象中有几个属性,循环体就会执行几次
  • 每次执行时,会将对象中的一个属性名赋值给变量

10.函数内部属性(只有在函数内部才能访问) 
arguments:一个类数组对象,包含着传入函数中的所有参数。arguments主要用途是保存函数参数
(当传递的实参个数超过形参的个数的时候不会报错,所有的实参都会保存在arguments里)
callee属性:arguments 对象有一个名为callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。(arguments.callee 实际上就是函数名。)
length 属性:arguments 对象的 length 属性返回实参个数。

11.this指向问题

this——执行环境上下文对象

  • 在方法中,this表示该方法所属的对象
  • 单独使用,this表示全局对象
  • 在函数中,this表示全局变量
  • 在事件中,this表示接收事件的元素
  • 在显式函数绑定时,我们可以自己决定this指向

 

 

 

 

 12.同步异步

同步任务是那些没有被引擎挂起、在主线程上排队执行的任务。只有前一个任务执行完毕,才能执行后一个任务。

异步任务是那些被引擎放在一边,不进入主线程、而进入任务队列的任务。只有引擎认为某个异步任务可以执行了(比如 Ajax 操作从服务器得到了结果),该任务(采用回调函数的形式)才会进入主线程执行。排在异步任务后面的代码,不用等待异步任务结束会马上运行,也就是说,异步任务不具有“堵塞”效应。

1.回调函数
function f1(callback) {
  // ...
  callback();
}

function f2() {
  // ...
}

f1(f2);

f2写成f1的回调函数。
f2必须等到f1执行完成,才能执行。

回调函数的优点是简单、容易理解和实现,缺点是不利于代码的阅读和维护,各个部分之
间高度耦合,使得程序结构混乱、流程难以追踪(尤其是多个回调函数嵌套的情况),而且每个任务只能指定一个回调函数

介绍两个定时器setInterval(隔一段时间执行)和setTimeout(执行一次)
setInterval(function(){
    执行代码
},时间间隔(毫秒))
setTimeout(function(){
    执行代码
},时间间隔(毫秒))
clearTimeout(定时器标识)//清除setTimeout定时器
clearInterval(定时器标识)//清除setInterval定时器
2.事件监听
对于元素事件的监听也是异步的,因为只有满足==事件触发条件==时才会执行相应的函数

 小结:感觉这次课程还有很多不理解未掌握的地方,课后的补充也大多基于学长讲课用的博客,在后续作业与练习的过程中,我会尽力在实践中吸纳这些知识的orz

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值