JavaScript简识

简介: 本文主要介绍前端三剑客中的JavaScript的基础语法,关于JavaScript的DOM API在下文中介绍。

1.初识JavaScript


1.1 背景


JavaScript是当下最流行的语言之一,其主要应用于前端页面的开发。

对于在浏览器上执行的JavaScript来说,可以视为三个部分:


1.JS核心语法

2.DOM API:浏览器提供的一组操作页面元素的API

3.BOM API:浏览器提供的一组操作浏览器窗口的API。


1.2 三剑客的关系


HTML:网页的结构(骨)

CSS:网页的表现(皮)

JavaScript:网页的行为(魂)


2.基础知识


2.1 书写形式


运行在浏览器中的js是离不开html的,通常需要嵌入到html中来进行编写。


1.内嵌式


把js写到script标签中


<script>
  alert("haha");
</script>


alert是一个警示对话框,在2.2中介绍

2.行内式


直接嵌入到html元素内部


<button onclick="alert('hello')">
        这是一个按钮
    </button>


微信图片_20230111151816.png


3.外部式


写到单独的.js文件中,在html里面通过script来引入。


<script src="hello.js"></script>
alert("hehe");

注意,这种情况下scri标签中间不能写代码(写了代码也不会执行)

适合于js代码多的情况


2.2 输入输出


1.输入:prompt

弹出一个输入框


//弹出一个输入框
prompt("请输入您的姓名");

注意:在js中的注释风格于Java中的注释风格一致


2.输出:alert

弹出一个警示对话框,输出结果


//弹出一个输出框
alert("hello");

3.输出:console.log

在控制台打印一个日志


//向控制台输出日志
console.log("这是一条日志");

此处的控制台并不是我们之前遇到的黑框框,而是浏览器自己的控制台(可以按F12,在开发者工具中看到)


微信图片_20230111151810.png

如果js代码中出现一些语法错误,或者运行时错误,也会在控制台中显示出来。


2.3 变量


定义一个变量:


var 变量名=初始值;

微信图片_20230111151806.png

不管创建的变量是什么类型,都是用var这个关键字来表示的,至于变量具体是什么类型,取决于初始化的值是什么类型。


实际使用中使用let作为变量更多,其修复了var的一些问题


使用变量

和Java相同,涉及到对变量的读取和修改操作


微信图片_20230111151801.png

上图的用法,看起来和Java相差不大


但是实际上在变量修改时存在差别,如果a本来是一个数字类型,在赋值的时候,给它赋一个其他类型的变量,a变量的类型也就随之发生改变了。


微信图片_20230111151757.png

变量的类型可以在运行过程中,随着赋值而发生改变,这种行为称为“动态类型”

而像Java这样的语言,不支持这种运行时类型发生改变的行为,称为“静态类型”


2.4 基本数据类型


number:数字,不区分整数和小数

boolean:true真 false假;与C语言一样非零为真,0为假

string:字符串类型

undefined:只有唯一的值 undefined,表示未定义的值

null:只有唯一的值null,表示空值

2.4.1 数字类型


js中不区分整数和浮点数,统一都使用“数字类型”来表示


数字进制表示:

与Java规则相同


微信图片_20230111151753.png

特殊的数字值:


Infinity:无穷大,大于任何数字

-Infinity:负无穷大,小于任何数字(区别于无穷小,无穷小是趋近于0)

NaN:表示当前的结果不是一个数字

console.log("hello"-10);
//NaN

但如果将减号改为加号,将变成字符串拼接操作。


2.4.2 布尔类型


表示真和假

在参与运算时当作1和0来看待


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

2.4.3 字符串类型


字符串字面值需要使用引号来引起来,单引号双引号均可。


如果字符串中本来已经包含引号,可以单引号双引号交替使用,或者使用转义字符。


微信图片_20230111152520.png

转义字符:

与Java中的转义字符相同,例如如下方式


微信图片_20230111151748.png

求长度:

通过length属性来求长度


微信图片_20230111151739.png

这里的长度的单位是“字符”。


2.4.4 undefined未定义数据类型与null空值类型


该类型只有undefined这一个取值,一个未被初始化的变量的值就是undefined,但注意区别不同于null,null表示当前这个值属于“没有值”的概念。


微信图片_20230111151736.png

2.5 运算符


JavaScript中的运算符和Java用法基本相同,下边我们着重介绍不太相同的一些运算符。

算术运算符中:


/

js中不区分整数和小数


微信图片_20230111152704.png

比较运算符中:


  • == 和 !=比较相等(会进行隐式类型转换)
  • === 和 !==比较相等(不会进行隐式类型转换)


第一种比较只是比较两个变量的值,而不比较两个变量的类型,如果两个变量能够通过隐式类型转换,转换成相同的值,此时就认为也是相等的。

第二种比较不仅比较两个变量的值,还会比较类型,如果类型不相同,就直接认为不相等。


微信图片_20230111151722.png

逻辑运算符中:


&&与:一假则假

c=a&&b

如果a的值为假,此时c的值就是表达式a的值

如果a的值为真,此时c的值就是表达式b的值

||或:一真则真

c=a||b

如果a的值为真,此时c的值就是表达式a的值

如果a的值为假,此时c的值就是表达式b的值

2.6 逻辑语句


逻辑语句中涉及到的条件语句和循环语句,都和Java中的用法相同,这里就不再多做介绍。


2.7 数组


2.7.1 创建数组


使用new关键字创建


//Array的A要大写
var arr=new Array();

使用字面量方式创建【常用】


var arr=[];
var arr2=[1,2,'haha',false];
//数组中保存的元素可以是不同类型


2.7.2 获取数组元素


使用下标的方式访问数组元素(从0开始到length-1)


var arr=['C','C++','Java',666];
console.log(arr[0]);
console.log(arr[1]);
console.log(arr[2]);
console.log(arr[3]);


微信图片_20230111151714.png

看上边的用法和Java无异,区别如下:


var arr=['C','C++','Java',666];
arr[100]=10;
console.log(arr);

微信图片_20230111151711.png

原本数组长度只有4,去访问下标为100的数组元素并赋值,就得到了长度为101的数组,中间的96个元素都是undefined。


区别更大的是:


var arr=['C','C++','Java',666];
arr[100]=10;
arr[-1]=10;
arr['hello']=10;
console.log(arr);


微信图片_20230111151706.png微信图片_20230111151706.png

微信图片_20230111151706.png

这里的下标“-1” “hello”,与其说是一个下标,不如说是一个属性,其并不影响数组的长度,只是给arr这个对象新增了两个键值对属性。


2.7.3 新增数组元素


由于js中数组的特性,可以直接通过下标来新增数组元素,但是最为常见的插入操作,是push方法,能够给数组末尾追加一个元素。


代码示例:给定一个数组,把数组中的奇数放到另一个数组中。


var arr=[9,5,7,3,2,6,8];
var arr2=[];
for(var i=0;i<arr.length;i++) {
  if(arr[i]%2!=0) {
      arr2.push(arr[i]);
  }
}
console.log(arr2);
// 
[9,5,7,3]


2.7.4 删除数组元素


使用splice方法删除元素


var arr=[9,5,2,4];
//第一个参数表示从下标为2的位置开始删除,第二个参数表示要删除的元素个数为1
arr.splice(2,1);
console.log(arr);
//结果
[9,5,4]


splice方法不仅可以完成删除功能,还可以完成插入和替换的功能,具体用法见下图:


微信图片_20230111151652.png

该方法先根据前两个参数完成对应区间的删除,如果有后边的item参数,就会把这些item插入到删除开始的位置。


var arr=[1,2,3,4,5,6];
arr.splice(2,3,100,200,300,400);
console.log(arr);


微信图片_20230111151649.png


2.8 函数


2.8.1 表达式


语法格式


//创建函数/函数声明/函数定义
function 函数名(形参列表) {
  函数体
  return 返回值;
}
//函数调用
函数名(实参列表)   //不考虑返回值
返回值=函数名(实参列表)  //考虑返回值


给函数指定参数的时候是不需要写参数类型的


微信图片_20230111151645.png

由上图例子我们可知,传入实参类型是可以任意的,只要能够支持函数内部的逻辑即可(比如此处要求两个参数能够相加即可)


函数参数的个数

实参和形参之间的个数可以不匹配,但是实际开发中,一般要求形参和实参个数匹配

1)如果实参个数比形参个数多,则多出的参数不参与函数运算


sum(10,20,30);   //30

2)如果实参个数比形参个数少,则此时多出来的形参值为undefined


sum(10);   //NaN,相当于num2为undefined

例子:完成七个以内数字的相加


微信图片_20230111151642.png

由于传入的实参个数小于形参个数,未被初始化的形参与其他形参相加就会得到NaN的结果。

我们可以利用||操作符,来让使得形参在未被定义时不是undefined而是0,下图的两种方式可以达到相同的效果


微信图片_20230111151639.png

如下图,可以完成七个以内数字的相加


微信图片_20230111151634.png

函数表达式


可以通过形如function() {}这样的写法来定义一个匿名函数,然后将这个匿名函数用一个变量来表示;

所谓函数表达式,就是把一个函数赋值给一个变量了,这个变量的类型就是function函数类型。


微信图片_20230111151631.png

2.8.2 作用域


在JavaScriptES6之前,作用域只有全局作用域和局部作用域;在ES6之后引入let后,有了块级作用域,使得定义在大括号内部的变量,在大括号外面是无法访问的。(但是在大括号内部的代码是可以访问到大括号外部的变量的)


因为js中的函数可以嵌套定义,对于内层函数本体如果找不到变量,是支持“逐级向上”查找的


微信图片_20230111151626.png

当前是在hello这个函数内尝试打印num,但是在hello中并没有num变量,于是就往上级找,找到hello2这里也没有num,于是继续往上找,找到了全局作用域后找到了num(如果最后的全局作用域也没找到,就会报错)


2.9 对象


对象就是一些属性和方法的集合


在Java中,对象需要先有类,然后针对类的实例化才能产生对象;但在JS中,对象是不依托于类的,在JS中所有对象,都是一个类型。


1.在JS中,主要是直接通过{}的方式来创建对象的,每个属性和方法都是通过“键值对”这样的方式来表达的,键值对之间使用,来分割,键和值之间使用:来分割后续可以通过对象名.属性名的方式来进行访问。


微信图片_20230111151622.png

下边两种不是太常用的创建对象的方法:

2.使用 new Object 创建对象


let people=new Object();
     people.name='萧炎';
     people.height=180;
     people['weight']=120;
     peopel.wife='美杜莎';
     people.special_moves=function() {
        console.log("佛怒火连");
     }
     console.log(people.name);
     console.log(people.wife);
     people.special_moves();


JS中对象的成员,随时是可以动态改变的。


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

前面的创建对象方式只能创建一个对象,而使用构造函数可以很方便的创建多个对象。

例如:创建几个狗狗对象


微信图片_20230111151617.png

此时写起来就比较麻烦,使用构造函数可以把相同的属性和方法提取出来,提高代码复用率。


基本语法:


function 构造函数名(形参){
  this.属性=值;
  this.方法=function...
}
let obj=new 构造函数名(实参);


微信图片_20230111151607.png

相关文章
|
2月前
|
存储 JavaScript 前端开发
JavaScript
JavaScript
23 0
|
5月前
|
存储 JavaScript 前端开发
Javascript
avaScript 是一种用于在网页上实现交互性和动态功能的脚本语言。
30 0
|
10月前
|
JavaScript 前端开发 Java
【JavaScript】学后总结
JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型;它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
|
Web App开发 编解码 JavaScript
【初识JavaScript-01】
学习好一门语言贵在坚持之初识JavaScript🏹💁‍♂️!
77 0
【初识JavaScript-01】
|
JavaScript 前端开发
JavaScript字符串转数字
JavaScript字符串转数字 由于输入框或对话框返回的类型是字符串,但当我们想使用数字类型时进行一些数学的计算时我们就需要转换为数字类型,使用parseInt、parseFloat即可。
JavaScript字符串转数字
|
JavaScript 前端开发
玩转Javascript魔法篇
这些都是平时我们经常在业务中会用的功能,实现起来的方法不止一种,但是我们要经常思考,举一反三,追求一种简洁高效的写法,不是吗?
86 0
玩转Javascript魔法篇
|
JavaScript 前端开发 API
简单了解 JavaScript的组成
DOM ,BOM, ECMAScript JS组成
|
前端开发 JavaScript 程序员
JavaScript Scoping & Hoisting
上面这段代码在运行时会产生什么结果? 尽管对于有经验的程序员来说这只是小菜一碟,不过我还是顺着初学者常见的思路做一番描述: 创建了全局变量 a,定义其值为 1 创建了函数 foo 在 foo 的函数体内,if 语句将不会执行,因为 !a 会将变量 a 转变成布尔的假值,也就是...
1222 0
|
JavaScript 前端开发 API