基本语法、流程控制、函数和数组等基本知识点整理

本文详细介绍了JavaScript的基础知识,包括变量、数据类型、表达式、运算符和流程控制。深入讲解了函数的定义、调用、变量作用域及闭包,以及数组的创建、操作和排序方法。内容涵盖选择结构、循环结构、跳转语句、对象原型扩展和常见数组方法等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本语法

变量

标识符
由大小写字母、数组、下划线和美元符号$组成,不能以数字开头,严格区分大小写,不能使用JavaScript中的关键字命名。
当标识符中需要多个单词进行表示时,表示方式有下滑线法、驼峰法和帕斯卡法。
保留关键字
保留关键字是指在JavaScript语言中被事先定义好并赋值特殊含义的单词,有break、case、catch、class、const、continue、debugger、default、delete、do、else、export、if、null、try等关键字
变量的使用
变量可以看作是存储数据的容器,通常利用var关键字声明,并且变量名的命名规则与标识符相同。

var sales;
var hits,hot,NEWS;
var room_102,room_103

变量的赋值

var unit,room;//声明变量
unit=1;//为变量赋值
room=101;//为变量赋值
var fname='Tom',age=12;//声明变量的同时赋值

数据类型

数据类型分类
数据类型:
1)基本数据类型:
Boolean(布尔型):只有true和false两个值

var flag1=true;
var flag2=false;

Number(数值型):不区分整数和浮点数

var oct=032;          //八进制数表示的26
var dec=26;          //十进制26
var hex=0x1a;         //十六进制表示的26

Null(空型):空型只有一个特殊的null值,用于表示一个不存在的或无效的对象或地址。

Undefined(未定义型):未定义型只有一个特殊的undefined值,用于声明的变量还未被初始化时,undefined表示没有为变量设置值
String(字符型):由Unicode字符、数字等组成的字符序列,它是JavaScript用来表示文本的数据类型。

var slogan='Knowledge';//单引号,存放一个单词
var str="the sky is blue";//双引号,存放一个句子
var color='"red"blue';//单引号中包含双引号
var food="'pizza'bread";//双引号中包含单引号

2)引用数据类型:Object(对象)

数据类型检测
typeof操作符:以字符串形式返回未经计算的操作数的类型。

console.log(typeof num1);//输出结果:number
console.log(typeof num2);//输出结果:string
console.log(typeof sum);//输出结果:string

对象原型的扩展函数:

var data=null;
var type='Null';
Object.prototype.toString.call(data)=='[object'+type+']';

数据类型转换
1.转布尔型
2.转数值型:开发中在接收用户传递的数据进行运算时,为了保证参与运算的都是数值型,经常需要对其进行转换。

var num1=prompt('请输入求和的第1个数据:');//假设当前用户输入:123abc
var num2=prompt('请输入求和的第2个数据:');//假设当前用户输入:456
//未处理直接进行相加运算
console.log(num1+num2);//输出结果:123abc456
console.log(parseInt(num1)+parseInt(num2));//输出结果:579

3.转字符型:可用String()函数和toString()方法进行转换

var num1=num2=num3=4,num4=26;
console.log(String(12));
console.log(num1+num2+num3.toString());
console.log(num4.toString(2));

表达式

表达式可以是各种类型的数据、变量和运算符的集合。

var x,y,z;//声明变量
x=1;//将表达式“1”的值赋值给变量x
y=2+3;//将表达式“2+3”的值赋值给变量y
z=y=x;//将表达式“y=x”的值赋值给变量z
console.log(z);//将表达式“z”的值作为参数传给console.log()方法
console.log(x+y);//将表达式“x+y”的值作为参数传给console.log()方法

运算符

算术运算符
常用运算符:+、-、*、/、%、++、–
字符串运算符
“+”操作的两个数据中只要有一个是字符型,则“+”就表示字符串运算符,用于返回两个数据拼接后的字符串。

var color='blue';
var str='The sky is'+color;
var tel=110+'120';
console.log(str);
console.log(tel);
console.log(typeof str,typeof tel);

赋值运算符
赋值运算符用于将运算符右边的值赋给左边的变量。
=(赋值)、+=(加并赋值)、%=(模并赋值)等

比较运算符
(1)不相同类型的数据进行比较时,首先会自动将其转换成相同类型的数据后再进行比较。
(2)运算符“”和“!=”与运算符“=”和“!==”在进行比较时,前两个运算符知比较数据的值是否相等,后两个运算符不仅要比较值是否相等,还要比较数据类型是否相等。
逻辑运算符
a&&b a和b都为true,结果为true,否则为false;
a||b a和b中至少有一个为true,则结果为true,否则为false;
!a 若a为false,结果为true,否则相反。
三元运算符
三元运算符是一种需要三个操作数的运算符,运算的结果根据给定条件决定

条件表达式?表达式1:表达式2

位运算符
&(按位与) a&b a和b每一位进行“与”操作后的结果
|(按位或) a|b a和b每一位进行“或”操作后的结果
~(按位非) ~a a的每一位进行“非”操作后的结果
^(按位异或) a^b a和b每一位进行“异或”操作后的结果

流程控制

选择结构

1.单分支语句:
if条件判断语句被成为单分支语句

if(判断句){
代码段
}

2.双分支语句
if……else语句也被称为双分支语句

if(判断条件){
代码段1;
}else{
代码段2;
}

3.多分支语句
(1)if……else if……else也被称为多分支语句

if(条件){
代码段1;
}else if(条件2){
代码段2;
}
……
else if(条件n){
代码段n;
}else{
代码段n+1;
}

(2)switch语句也是多分支语句,功能与if系列条件语句相同,不同的是它只能针对某个表达式的值做出判断,从而决定执行那一段代码。

switch(表达式){
case值1:代码段;break;
case值2:代码段;break;
……
default:代码段n;
}
循环结构

所谓循环语句就是可以实现一段代码的重复执行。
(1)while循环语句
while循环语句是根据循环条件来判断是否重复执行一段代码的。

while(循环条件){
循环体
……
}

(2)do……while循环语句
do……while循环语句的功能与while循环语句类似,唯一的区别在于,while是先判断条件后执行循环体,而do……while会无条件执行一次循环体后在判断条件。

do{
循环体
……
}while(循环条件);

(3)for循环语句
for循环语句是最常用的循环语句,它适合循环次数已知的情况。

var i=0;
while (i<5){
console.log('*');
}
跳转语句

跳转语句用于实现执行过程中的流程跳转。常用的跳转语句有break和continue语句。break语句可应用在switch和循环语句中,其作用是终止当前语句的执行,跳出switch选择结构或循环语句,执行后面的代码。而continue语句用于结束本次循环的执行,开始下一轮循环的执行操作。

函数

函数的定义与调用

参数设置
函数在定义是根据参数的不同,可分为两种类型,一种是无参函数,一种是有参函数。
(1)无参函数

function greet(){
console.log('Hello everybody!');
}

(2)有参函数

function maxNum(a,b){
a=parseInt(a);
b=parseInt(b);
return a>=b?a:b;
}

(3)获取函数调用时传递的所有实参

function transferParam(){
console.log(arguments.length);//获取用户实际传递的参数数量
console.log(arguments);//在控制台输出用户调用函数时传递的参数
}

函数调用
当函数定义完成后,要想在程序中发挥的作用,必须得调用这个函数。

function getSum(){//定义函数
var sum=0;//保存参数和
for(i in arguments){//遍历参数,并累加
sum+=arguments[i];
}
return sum;//返回函数处理结果
}
console.log(getSum(10,20,30));//函数调用

变量的作用域

变量需要在它的作用范围内才可以被使用,这个作业范围称为变量的作用域。JavaScript根据作用域使用范围的不同,可以将其划分为全局作用域、函数作用域和块级作用域。
针对JavaScript中不同作用域内声明的变量进行介绍:
(1)全局变量:不在任何函数内声明的变量或在函数内省略var声明的变量都称为全局变量,它在同一个页面文件中的所有脚本内都可以使用。
(2)局部变量:在函数体内利用var关键字定义的变量称为局部变量,它仅在该函数体内有效。
(3)块级变量:ES6提供的let关键字声明的变量称为块级变量,仅在()中间有效。

匿名函数

匿名函数是指没有函数名称的函数,可以有效地避免全局变量的污染以及函数名的冲突问题。它既是函数表达式的另一种表达形式,又可以通过函数声明色方式实现调用
回调函数

function cal(num1,num2,fn){
return fn(num1,num2);
}
console.log(cal(45,55,function(a,b){
return a+b;
}));
console.log(cal(10,20,function(a,b){
return a*b;
}));

嵌套与递归

函数嵌套域作用域链
嵌套函数指的是在一个函数内部存在另一个函数的声明。对于嵌套函数来言,内层函数只能在外层函数作用域内执行,在内层函数执行的过程中,若需要引入某个变量,首先会在当前作用域中寻找,若未找到,则继续向上一层的作用域中寻找,直到全局作用域。
递归调用
递归调用是函数嵌套调用中一种特殊的调用。它指的是一个函数在其函数体内调用自身的过程。

function factorial(n){//定义递归函数
if(n==1){
return 1;//递归出口
}
return n*factorial(n-1);
}
var n=prompt('求n的阶乘\n n是大于等于1的正整数,如2表示求2!。');
n=parseInt(n);
if(isNaN(n)){
console.log('输入的n值不合法');
}else{
console.log(n+'的阶乘为:'+factorial(n));
}

闭包函数

在JavaScript中,内嵌函数可以访问定义在外层函数中的所有变量和函数,并包括其外层函数能访问的所有变量和函数。但是在函数外部不能访问函数的内部变量的嵌套函数。
所谓闭包指的就是有权访问另一函数作用域内变量的函数。它最蛀牙的用途是一下两点:
1.可以在函数外部读取函数内部的变量。
2.可以让变量的值始终保持在内存中。

function fn(){
var times=0;
var c=function(){
return ++times;
};
return c;
}
var count=fn();//保存fn()返回的函数,此时count就是一个闭包
//访问测试
console.log(count());
console.log(count());
console.log(count());
console.log(count());
console.log(count());

数组

创建数组

数组在JavaScript中有两种创建方式,一种是试例化Array对象的方式;另一种是直接使用【】的方式创建数组。
(1)使用Array对象创建数组

var area=new Array('Beijing','Shanghai','Shenzhen');
var score=new Array(56,68,98,44)
var mix=new Array(123,'abc',null,true,undefined);

(2)使用【】创建数组

var weather=['wind','fine'];
var empty=[];
var mood=['sad',,,,'happy'];

数组的基本操作

获取数组长度
Aarry对象提供的length属性可以获取数组的长度,其值为数组元素最大下标加1。

var arr1=[78,88,98];
var arr2=['a',,,,'b','c'];
console.log(arr1.length);
console.log(arr2.length);

数组的访问与变量
(1)访问数组元素

var arr=['hello','JavaScript',22.48,true];
console.log(arr[0]);
console.log(arr[2]);
console.log(arr);

(2)遍历数组元素
所谓遍历数组元素就是一次访问数组中所有元素的操作。通常情况下,利用下标遍历数组可以使用for或for……in语句。

for(variable in object){……}

(3)元素的添加与修改
添加元素:

var height=[];//为空数组添加元素
height[5]=183;
height[0]=175;
height[3]=150;
console.log(height);
var arr=['Asa','Taylor'];
arr[2]='Tom';
arr[3]='Jack';
console.log(arr);

修改元素:

var arr=['a','b','c','d'];
arr[2]=123;
arr[3]=456;
console.log(arr);

(4)元素的删除
delete关键字只能删除数组中指定下标的元素值,删除后该元素依然会占用一个空存储位置。

常见的二维数组操作

创建与遍历

var info=new Array(new Array('Tom',13,155),new Array('Lucy',li,152));
var arr=new Array(new Array,new Array);
var num=[[1,3],[2,4]];
var empty=[[],[]];

二维数组转置

var arr=[[a,b,c],[d,e,f],[g,h,i],[j,k,l]];
var res=[];
for(var i=0;i<arr[0].length;i++){
res[i]=[];
for(var j=0;j<arr.length;++j){
res[i][j]=arr[j][i];
  
}
console.group('转置前:');
console.log(arr);
console.groupEnd();
console.group('转置后:');
console.log(res);
console.groupEnd();  

数组排序

冒泡排序
冒泡排从小到大按照要求排序或从大到小排序,不断比较数组中相邻两个元素的值,较大或较小的元素前移。冒泡排序比较的轮数是数组长度减1,每轮比较的对数等于数组的长度减当前的轮数。
插入排序
插入排序是冒泡排序的优化,是一种简单排序的算法。它的实现原理是,通过构建有序数组元素的存储,对未排序的数组元素,在以排序的数组中从最后一个元素向第一个元素遍历,找到相应位置并插入。其中,待排序数组的第1个元素会被看作是一个有序的数组,从第2个至最后一个元素被看作是一个无序数组。

常见数组方法

栈和队列方法
push()将一个或多个元素添加到数组的末尾,并返回数组的新长度
unshift()将一个或多个元素添加到数组的开头,并返回数组的长度
pop()从数组的末尾移除并返回一个元素,若是空数组则返回undefined
shift()从数组的开头移除并返回一个元素,若是空数组则返回undefined
检索方法
在开发中,若要检测给定的值是否是数组,或是查找指定的元素在数组中的位置,则可以利用Array对象提供的检索方法。
includes()用于确定数组中是否含有某个元素,含有返回true,否则返回false
Array.isArray()用于确定传递的值是否是一个Array,是返回true,不是返回false
indexof()返回在数组中可以找到给定值的第1个索引,如果不存在,则返回-1
lastIndexOf()返回指定元素在数组中的最后一个的索引,如果不存在则返回-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值