01-JavaScript简介
JavaScript背景
2003年之前,JavaScript被称为“牛皮藓”,用来制作页面上的广告、弹窗、漂浮的广告
2004年,JavaScript命运开始改变,谷歌公司开始带头使用Ajax技术
2007年,JavaScript在移动中不可或缺
JavaScript介绍
JavaScript入门易学性
- JavaScript对初学者比较友好、简单易用。可以使用任何文本编辑工具编写,只需要浏览器就可以执行程序
- JavaScript是有界面效果的(相比之下,C语言只有白底黑字)
- avaScript是弱变量类型的语言,变量只需要用 var/let/const 来声明。而lava中变量的声明,要根据变量的类型来定义
JavaScript是脚本语言
JavaScript运行在用户的终端网页上,而不是服务器上,此时我们称之为“前端语言”。就是服务于页面的交互和视觉,不能直接操作数据库
后端语言是运行在服务器上的,比如PHP、ASP、JSP等,这些语言能够操作数据库,进行“增删改查”操作
备注:Node.js是用JavaScript开发的,我们也可以用Node.js技术进行服务器端编程
JavaScript的组成
JavaScript基础分为三个部分:
- ECMAScript:JavaScript的语法标准(遵循规范)
- DOM:文档对象模型,操作页面上的元素的API
- BOM:浏览器对象模型,操作浏览器部分功能的API
JavaScript的特点
特点1:解释型语言
JavaScript是解释型语言,不需要事先被翻译为机器码,而是边翻译边执行(翻译一行,执行一行)
特点2:单线程
同一时间只能做一件事情
特点3:ECMAScript标准
HTML遵循W3C标准
JavaScript遵行ECMAScript标准
编译语言的分类
翻译器
计算机不能直接理解除机器语言之外的任何语言,所以必须要把程序员所编写的语言翻译成机器语言,计算机才能执行程序,程序语言翻译成机器语言的工具,被称为翻译器
翻译器翻译的方式有两种:一种是编译,另一种是解释。两种方式之间的区别在于翻译的时机不同
- 编译:在代码执行前,事前把所有的代码一次性翻译好,生成中间代码文件,然后整体执行
- 解释:边翻译,边执行
对应的语言,称之为“编译型语言”、“解释型语言”
编译型语言
优点:运行更快
不足:移植性不好,不跨平台
语言:c、c++、go
解释型语言
优点:移植性好,跨平台
不足:运行更慢
语言:JavaScript、php、Python
Java语言
Java语言既不是编译型语言,也不是解释型语言。翻译过程:
(1) 编译:.java
代码文件先通过javac命令编译成.class
文件
(2)执行:.class
文件再通过jvm虚拟机,解释执行。有了jvm的存在,让java跨平台了
安装JavaScript
首先需要安装nodejs
VSCode安装Code Runner插件
开始写第一行JavaScript代码
方式1:行内式
代码举例:
<input type="button" value="点我" onclick="alert('马哥教育')"/>
分析:
- 可以将单行或少量JS代码写在HTML标签的事件属性中(以on开头的属性)
- 这种书写方式,不推荐使用,原因是:可读性差,编写大量JS代码时,容易出错
方法2:内嵌式
代码举例:
<script type="text/javascript">
alert('马哥教育');
</script>
分析:
- text表示纯文本,因为JavaScript也是一个纯文本的语言
type="text/javascript"
:声明语言为JavaScript,写不写都行- 可以将多行JS代码写到
<script>
标签中
方法3:引用外部的JS文件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<!-- 引入外部的js文件 -->
<script src="test.js"></script>
</body>
</html>
test.js:
alert('马哥教育');
分析:
- 把放在
<script>
标签中的代码放在js文件,再通过<script>
标签中的src
属性引入 - js代码和html代码分开,有利于代码的结构化和复用
JS一些简单的语法规则
(1)JS对换行、缩进、空格不敏感,每一条语句以分号结尾
<script type="text/javascript">
alert('今天星期一');
alert('天气晴');
</script>
等价于代码:
<script type="text/javascript">
alert('今天星期一');alert('天气晴');
</script>
备注
:
(1)每一条语句末尾要加上分号,如果不写分号,浏览器会自动添加,但是会消耗一些系统资源
(2)所有的符号都是英语的
(3)严格区分大小写
注释
我们不要把HTML、CSS、JavaScript三者的注释格式搞混淆了
HTML的注释
<!-- 我是HTML的注释 -->
CSS的注释
/* 我是CSS注释 */
JavaScript的注释
// 我是JavaScript的注释
JavaScript输入输出语句
弹出警告框:alert()
安全中,我们会用alert来弹出cookie,获得用户的身份
cookie:验证用户身份
alert(document.cookie);
控制台输出:console.log(‘’)
再浏览器中,按F12即可打开控制台,选择「console」
总结:alert()主要用来显示消息给用户,console.log用来给程序员自己调试的
弹出输入框:prompt()
prompt( )
就是专门用来弹出能够让用户输入的对话框,用的少,测试的时候偶尔会用
prompt('请输入:');
调出打印机:print()
print(20);
02-变量
字面量
"字面量"即常量,是固定值,不可改变
字面量有3种:
- 数字
- 字符串
- 布尔字面量
(1)数值的字面量非常简单,写上去就行,不需要任何的符号。例如:
alert(886); //886是数字,所以不需要加引号
(2)字符串的字面量也很简单,但一定要加上引号,可以是单词、句子等。例如:
console.1og('886');
console.1og('马哥教育');
注意
:886是数字,‘886’是字符串
(3)布尔字面量举例:
if(true){
conso1e.1og('true');
}
变量的概念
变量:适用于存放数据的容器
本质:程序在内存中申请的一块用来存放数据的空间
变量的声明和赋值
变量的声明/定义
ES6之前
在ES6语法之前,统一使用var关键字来声明一个变量,比如:
var name;
ES6之后
在ES6语法之后,可以使用const
、let
关键字来声明一个变量
const name;
let age;
变量的赋值
name='李杨杨'
变量的初始化
声明的同时赋值:
var a=10;
变量的命名规则
- 由字母、数字、下划线、美元符$组成,不能以数字开头
- 不能使用「关键字」和「保留字」做为变量名
- 建议使用驼峰命名法
- 变量名区分大小写
- 变量名长度不超过255个字符
标识符、关键字、保留字
标识符
标识符: 在JS中所有可以由我们自主命名的都可以称之为标识符
例如:变量名、函数名、属性名、参数名都是属于标识符。通俗来讲,标识符就是我们写代码时为它们起的名字
标识符的命名规则和变量的命名规则是一样的,看上面一段就可以了
同样,标识符不能使用语言中保留的关键字及保留字
关键字
关键字: JS本身已经使用了的单词,具备固定的语义
JS终端关键字如下:
break、continue、case、default、
if、else、switch、for、in、do、while、
try、catch、finally、throw、
var、void、function、return、new、
this、typeof、instanceof、delete、with、
true、false、null、undefined
保留字
保留字: 实际上是预留的“关键字”,意思是现在虽然还不是关键字,但是未来可能会成为关键字
JS中的保留字如下:
abstract、boolean、byte、char、class、const、
implements、import、int、interface、long、native、package、
private、protected、public、short、static、super、synchronized、throws、
transient、volatile
变量值的交互
想要把两个杯子里的饮料进行交换,就要通过第三个杯子
那么程序中就要通过第三个变量进行交换:
var a1=100;
var a2=200;
var temp;
temp=a1;
a1=a2;
a2=temp;
console.log(a1);
console.log(a2);
03-变量的数据类型
变量的数据类型
为什么需要数据类型
在计算机中,不同的数据所需占用的存储空间不同,为了充分利用存储空间,于是定义了不同的数据类型
我们都知道,无论这个变量是字符串类型,还是数字类型,我们都可以直接用var去定义它,比如:
var a='hello world';
var b=123;
为什么可以这样做呢?这是因为:JavaScript是一种「弱类型语言」,或者说是一种「动态语言」,这意味着不需要提前声明变量的类型,在程序运行的过程中,类型会自动被确定
JS变量的数据类型,是在程序运行的过程中,根据等号左边的值来确定的
JS中一共有六种数据类型
- 基本数据类型(值类型): Number数值、String字符串、Boolean布尔型、Null空值、undefined未定义
- 引用数据类型(引用类型): Object对象
面试问:引用数据类型有几种:
答:只有一种,即Object类型
数据类型之间最大的区别:
- 基本数据类型:参数赋值时,传“值”
- 引用数据类型:参数赋值时,传地址==(修改的同一块内存地址)==
一个经典的例子
基本数据类型举例:
var a=23;
var b=a;
a++; //数值加1,地址不变
console.log(a); //打印结果:24
console.log(b); //打印结果:23
引用数据类型举例:
var obj1 = new Object();
obj1.name='magedu';
// 让 obj2 等于 obj1
var obj2 = obj1;
// 修改 obj1 的 name 属性
obj1.name ='网络安全';
console.log(obj1.name);//打印结果:网络安全
console.log(obj2.name);//打印结果:网络安全
栈内存和堆内存
首先我们要记住:JS中,所有的变量都是保存在栈内存中的
基本数据类型:
保存在栈内存中,值与值之间是独立存在,修改一个变量不会影响其他的变量
引用数据类型:
对象保存在堆内存中
每创建一个新的对象,就会在堆内存中开辟出一个新的空间;而变量保存了对象的地址,保存在栈内存中,如果两个变量保存了同一个对象的地址,当一个变量修改值时,另一个变量也会受到影响
04-基本数据类型:String和Boolean
String字符串
语法
被双引号 “”
或单引号 ''
括起来的任意文本
引号的注意事项
1、单引号和双引号不能混用,比如下面这样写是不可以的:
var str='hello";
2、同类引号不能嵌套:双引号里不能在放双引号,单引号里不能再放单引号,但是可以用\实现转义
3、双引号里可以嵌套单引号,单引号里可以嵌套双引号
转义字符
在字符串中我们可以用\
作为转为转义字符,当表示一些特殊符号时可以使用\
进行转义
\"
:双引号”
\'
:单引号’
\\
:\
\r
:回车
\n
:换行
\t
:缩进
\b
:空格
获取字符串的长度
通过length属性
var str1='学习';
console.log(str1.length);
字符串拼接
多个字符串之间可以使用加号+
进行拼接
拼接规则: 拼接前,会把与字符串相加的这个数据类型转成字符串,然后再拼接成一个新的字符串
var str1='马哥教育'+666;
var obj={name:'无名',age:22};
var str2='无名'+obj.age
console.log(str1);
console.log(str2);
字符串的不可变性
字符串里面的值不可被改变,虽然看上去可以改变内容,但其实是地址了,内存中新开辟了一个内存空间
代码如下:
var str='hello';
str='magedu'
比如上面的代码,当重新给变量str赋值时,常量hello
不会被修改,依然保存在内存中,str会改为只想magedu
模板字符串(模板字面量)
ES6中引入了模板字符串,让我们省去了字符串拼接的烦恼
模板字符串中插入变量
字符在``中表示,变量用${}表示
var name='magedu';
var age='26';
console.log('我是'+name+',age:'+age); //传统写法
console.log(`我是${name},age:${age}`); //ES6写法
模板字符串中插入表达式
ES6语法中不需要\n表示换行,直接回车
const a=5;
const b=10;
console.log('this is '+(a+b)+' and\nnot '+(2*a+b)+'.'); //传统写法
console.log(`this is ${a+b} and
not ${2*a+b}.`); //ES6写法
模板字符串中可以换行
因为模板字符串支持换行,直接回车就可以
模板字符串中可以调用函数
字符串中调用函数的位置,将会显示函数执行后的返回值
function getName(){
return 'magedu';
}
console.log(`www.${getName()}.com`); //打印结果:www.magedu.com
模板字符串支持嵌套使用
布尔值:Boolean
布尔型有两个值:true和false。主要用来做逻辑判断:true表示真,false表示假
布尔值直接使用就可以了,千万不要加引号
代码:
var a=true;
console.log(typeof a);
控制台输出:
boolean
布尔型和数字型相加时,true按1来算,false按0来算
var str1=1;
var str2=str1+true;
console.log(str2); //结果为2
05-基本数据类型:Number
数值型:Number
在JS中所有的数值都是Number类型,包括整数和浮点数(小数)
数值范围
由于内存的限制,ECMAScript并不能保存世界上所有的数值
- 最大值:
Number.MAX_VALUE
,这个值为:1.7976931348623157e+308 - 最小值:
Number_MIN_VALUE
,这个值为:5e-324
如果使用Number表示的变量超过了最大值,则会返回Infinity
- 无穷大(正无穷):Infinity
- 无穷小(负无穷):-Infinity
注意:typeof Infinity
的返回结果是number
NaN
NaN:是一个特殊的数字,表示Not a Number,非数值,比如:
Console.log(abc/18); //结果是NaN
console.log("abc"*"abc") //按理说,字符串相乘是没有结果的,但如果你非要让JS去算,它就一定会给你NaN
注意:typeof NaN
的返回结果是number
连字符和加号的区别
键盘上的+
可能是连字符,也可能是数字的加号
conso1e.1og(“吃”+"饭”+“没”); //连字符,把三个独立的汉字,连接在一起了
console.1og(1+2+3); //输出6
总结: ** 如果+
两边都是**Number类型,此时是数字相加,否则,就是连字符
隐式转换
我们知道,"2"+1
得到的结果其实是字符串,但是"2"-1
得到的结果却是数值1,
这是因为计算机自动帮我们进行
了**“隐式转换”**
也就是说,-
、*
、/
、%
这几个符号会自动进行隐式转换。例如:
var a="4"+3-6;
console.log(a);
输出结果:
37
虽然程序可以对-
、*
、/
、%
这几个符号自动进行“隐式转换”;但作为程序员,我们最好自己完成转换,方便程序的可读性
浮点数的运算
运算精度问题
在S中,整数的运算基本可以保证精确;但是小数的运算,可能会得到一个不精确的结果。所以,千万不要使用JS进行对精确度要求比较高的运算
处理数学运算的精度问题
引用针对数学运算的开源库
变量值的传递(赋值)
语句:
a=b;
把b的值赋给a,b不变
06-基本数据类型:Null和Undefined
Null:空对象
null专门用来定义一个空对象,值只有一个,就是null
使用typeof检查一个null值时,会返回object
let a=null;
console.log(typeof a); //打印结果:object
undefined
case1:变量已声明,未赋值时
声明了一个变量,但没有赋值,此时它的值就是 undefined
,举例:
let name;
console.log(name); //打印结果:undefined
console.log(typeof name); //打印结果:undefined
补充:
- Undefined 类型的值只有一个,就是 undefind。比如
let a = undefined
- 使用 typeof 检查一个 undefined 值时,会返回 undefined
case2:变量未声明时
如果你从未声明一个变量,就去使用它,则会报错;此时,如果用 typeof
检查这个变量时,会返回 undefined
。举例:
console.log(typeof a); //undefined
console.log(a); //打印结果:Uncaught ReferenceError: a is not defined
case3:函数无返回值时
如果一个函数没有返回值,那么,这个函数的返回值就是 undefined
或者,也可以这样理解:在定义一个函数时,如果末尾没有 return 语句,那么,其实就是 return undefined
举例:
function foo(){}
console.log(foo()); //打印结果:undefined
case4:调用函数时,未传参
调用函数时,如果没有传参,那么,这个参数的值就是undefined
举例:
function foo(name){
console.log(name);
}
foo(); //调用函数时,未传参。执行函数后的打印结果:undefined
实际开发中,如果调用函数时没有传参,我们可以给形参设置一个默认值:
function foo(name){
name=name || 'mage';
console.log(name);
}
foo();
使用ES6语法,上方代码也可以这样写:
function foo(name='mage'){
console.log(name);
}
foo();
其他区别
null和undefined有很大的相似性,尤其是null == undefined
的结果为true
也更加能说明这点
但是null === undefind
的结果是false
=赋值
==判断等于,只判断数值,不判断类型
===判断等于,即判断数值也判断类型
var a=null==undefined;
console.log(a); //结果为:true
他们虽然相似,但还是有区别的,其中的一个区别是,和数字运算时:
- 10 + null 的结果为10
- 10 + undefind 的结果为NaN
规律总结:
- 任何数据类型和undefined运算都是NaN
- 任何值和null运算,null可看做0运算
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 【网络安全的神秘世界】JavaScript
发表评论 取消回复