JS基础知识点js基础:变量,数据类型(基本和引用),数据类型转换选择结构,循环结构
基本数据类型(按值访问):Undefined 、 Null 、 Boolean 、 Number 和 String
引用数据类型(按引用访问):object、Array、function
typeof(检测基本数据类型时 typeof 是非常得力的助手)可以返回以下6种类型:undefined 、 boolean 、 number 、string、object(对象和null都是object类型)、function
instanceof(用于检测引用类型):所有引用类型的值都是 Object 的实例,person(引用类型值) instanceof Object永远都是true。
要知道是什么类型的对象,使用instanceof 操作符接上想要判断的类型,例如colors instanceof Array。
基本数据类型复制:复制的是该变量的副本,这两个变量可以参与任何操作而不会相互影响
引用数据类型复制:复制的是该变量的指针,该指针指向存储在堆中的一个对象。复制操作结束后,两个变量实际上将引用同一个对象。因此,改变其中一个变量,就会影响另一 个变量
传参:基本类型和引用类型全部是按值传递,相当于把参数复制一份给到function的局部变量
为了便于操作基本类型值,ECMAScript 还提供了 3 个特殊的引用类型: Boolean 、 Number 和
String 。
Number 类型重写了 valueOf() 、 toLocaleString() 和 toString()方法。除了继承的方法之外, Number 类型还提供了一些用于将数值格式化为字符串的方法。 toFixed() 方法会按照指定的小数位返回数值的字符串表示。
String 对象的方法也可以在所有基本的字符串值中访问到。其中,继承的 valueOf() 、 toLocale-String() 和 toString() 方法,都返回对象所表示的基本字符串值。String 类型的每个实例都有一个 length 属性。
字符方法:两个用于访问字符串中特定字符的方法是: charAt() 和 charCodeAt() 。
var stringValue = "hello world";
alert(stringValue.charAt(1)); //"e"
alert(stringValue.charCodeAt(1)); // 输出"101",小写字母 "e" 的字符编码
字符串操作方法
1、concat:拼接字符串,可接收任意多字符串,不改变原字符串值,虽然 concat() 是专门用来拼接字符串的方法,但实践中使用更多的还是加号操作符(+)。
var stringValue = "hello ";
var result = stringValue.concat("world", "!");
alert(result); //"hello world!"
alert(stringValue); //"hello"
2、三个基于子字符串创建新字符串的方法: slice() 、 substr() 和 substring() 。都接收1或2个参数。
slice() 、substring()在接收正数参数时,第一个参数是字符串截取的起始位置,第二个是字符串结束位置。
substr()在接收正数参数时,第一个参数同上,第二个参数是截取长度。
当第一个参数为负数的时候,slice()和substr()按照参数+字符串长度结果来截取;substring()将负参数转换为0;
当第二个参数为负数的时候,slice()按照参数+字符串长度结果来截取;substr()和substring()将负参数转换为0;
3、字符串位置方法:有两个可以从字符串中查找子字符串的方法: indexOf() 和 lastIndexOf()
4、trim():删除字符串前后空格,不改变原字符串值
5、字符串大小写转换方法
字符串大小写转换的方法有 4 个: toLowerCase() 、 toLocaleLowerCase() 、 toUpperCase() 和toLocaleUpperCase() 。
6、字符串的模式匹配方法
match() 方法只接受一个参数,要么是一个正则表达式,要么是一个 RegExp 对象。返回数组。
search()参数同上。返回要查找的在字符串中第一次出现的位置。
字符串替换:var result = text.replace("at", "ond");
7、localeCompare() 方法
var stringValue = "yellow";
alert(stringValue.localeCompare("brick")); //1
在前面返回1,同样位置返回0,在后面返回-1
变量的声明和变量的初始化
1. 变量的声明:var 变量名;
变量的赋值:变量名=值;
2. 变量的初始化:var 变量名=值;
数据类型
1.简单类型和复杂类型:
简单类型: Number,String,Boolean,Undefined,Null
复杂类型:Object
2.数字类型:Number
字符串类型:String,在js中存储字符串的数据的值,可以使用单引号,也可以使用双引号,目前推荐大家用双引号(代码中的括号小括号,大括号,中括号,逗号,分号都是英文的)
布尔类型:Boolean,其他的语言中bool,布尔类型中的数据只有true(1)或者是false(0)
未定义:undefined--就是自己,当一个变量声明了没有初始化(没有赋值),就是undefined
如果变量的值是Undefined和数字计算,结果是NaN---不是一个数字
空:null,当一个变量使用后,不想再使用了,可以赋值为null---->释放内存内存空间
Object:对象
typeof关键字--->识别该变量的类型
1.typeof 变量名
2.typeof(变量名)
数字类型的范围
1.//获取数字类型的最大值
console.log(Number.MAX_VALUE);
2.//获取数字类型的最小值
console.log(Number.MIN_VALUE);
3.//isNaN--->不是一个数字,结果才是true,否则就是false
var num="我好开森哦";
console.log(isNaN(num));
字符串的长度和拼接
1.获取字符串的长度:变量名.length---->该字符串的长度
console.log(name.length);
2.字符串的拼接:使用+来进行拼接
console.log(name1+name2+name3);
数字类型转换
1.其他类型转数字类型---字符串转数字, 布尔转数字
1.parseInt(变量);---转成整数的方式
2.parseFloat(变量)----转小数的方式
3.Number(变量)---数字类型----如果转换失败了,则显示的是NaN
4.isNaN(值)--->如果不是一个数字则返回true,如果是一个数字则返回false
2.其他类型转字符串类型
1.变量.toString()---转字符串了
2.String(变量)----转字符串了
3.其他类型转布尔类型
Boolean(变量)---转布尔类型
操作符
算数运算符:+ - * / %(取余)---->一个数字和另一个数字相除之后的余数
算数运算表达式:是一个表达式,由算数运算符连接起来的表达式
关系运算符:> <>= <=>
逻辑运算符: &&--->逻辑与 || --->逻辑或 ! --->逻辑非
赋值运算符:=
赋值运算符中还有复合赋值运算符: += -= *= /= %=
一元运算符:(++变量 变量++)
如果++是在后面,参与运算的时候,先参与运算,然后运算完毕后再自身加1
如果++是在前面,先自身加1,参与运算
流程控制
1.顺序结构
2. 分支语句(5个):if , if-else , if-else if-else if -else if...else , swtich-case , 三元表达式
3.循环语句(5):while , do-while , for , break , continue
break关键字,continue关键字
1.break关键字---->关于循环的
在循环中如果遇到了break关键字,则立刻跳出当前所在的循环
2.continue关键字---->在循环中使用
在循环中遇到了continue--->立刻回到循环的条件的位置,继续下一次循环
数组
1.数组的作用:一次性可以存储多个数据,数组中存储的数据类型可以不一样
2.数组的遍历:就是一个一个的获取数组中的数据
3.数组的定义:
1.通过构造函数的方式创建数组
var 数组名=new Array();
2.通过构造函数的方式创建数组
var 数组名=new Array(长度);
3.字面量的方式定义数组
var 数组名=[];
函数
1.函数:把一些重复的代码封装起来,在需要的时候直接调用
2.函数的作用:代码的重用(代码的重复使用)
3.函数的定义:
函数定义的语法:
function 函数名(){
函数体
}
函数的调用:
函数名();
4. 函数名字符合驼峰命名法
5.函数的参数
函数的参数:函数在定义的时候,函数名后面的小括号中的变量,就叫参数
函数在调用的时候传入的变量或者是值,也叫参数;
函数定义的时候函数名后面的小括号里面的变量叫形参
函数调用的时候函数名后面的小括号里面的变量或者是值叫实参
6.函数的返回值
如果一个函数没有返回值(函数中没有return),也没有参数,这个函数可以叫:无参数无返回值的函数;
返回值的细节问题:
当需要返回多个数据的时候,可以先将这些数据都传入到数组中,最后返回一个数组即可。
在函数中,return下面的代码,不执行;
函数没有返回值,接收了返回来的结果,结果是undefined;
当一个变量声明了,没有赋值,结果是undefined;
当一个函数内部,有return,但是后面什么也没有,那么此时,这个函数也是没有返回值的,该函数没有明确的返回值;
当一个函数没有明确的返回值的时候,如果接收,结果就是undefined;
arguments伪数组
arguments是可以在函数内获取用户在调用函数的时候传入了几个参数,同时还可以获取每个传入参数的值
作用域
作用域:变量的使用范围
局部变量:在函数中定义的变量就是局部变量
全局变量:除了函数以外任意的地方定义的变量,都是全局变量
局部变量的使用范围:只能在函数中使用
全局变量的使用范围:在页面的任何位置都可以
代码块:在一对大括号中写的代码,变量在代码块声明,只能在代码块中使用,(暂且的) 在js中是没有块级作用域的
隐式的全局变量:声明变量,没有使用var
数据类型转换选择结构,循环结构
1、数据类型转换
数据类型:number,string,boolean,null,undefined
var a = 123;
var b = "123";
var c = 1.23;
var result = b +56; 拼接
1.1、什么是数据类型转换
允许数据在各个类型之间灵活的转变
1.2、隐式转换
不需要认为参与,由程序自动完成
+
var a = true;
var b = 56;
var result = a + b; //57
1.3通过 typeof(参数) 函数帮助查看指定数据的类型
NaN : Not a Number
isNaN() : 是不是一个数字
isNaN("abc") : true
isNaN(123) : false
2、强制数据类型转换
转换函数
1、toString() 其它类型转字符串 但是遇到null undefind类型 报错 无法转换
String(); 其它类型转字符串 都能转
面试题 String vs toString()
var a = 123;
a.toString();
var b = ""+a; //string
var c = a+""; //string
2、其他类型转number
1、parseInt(参数) 取整
碰到第一个非数字的字符,停止转换
如果第一个字符就是非数字的,结果为NaN
parseInt("123"); --> 123
parseInt("123ABC"); --> 123
parseInt("123.456"); -->123
parseInt("ABC123"); --> NaN
2、parseFloat(参数) 取小数
将字符串转换为小数"15.36854"--->15.36854
3、弹出一个输入框
var num = prompt("请输入xxxx",0);
var num = prompt("请输入xxxx",0);
2、函数
函数(function),也叫方法(method),或过程(procedure)
2.1、什么是函数
是一段被【预定义】好,并且可以被反复使用的代码块。
代码块:允许包含多条语句。
是一个独立的功能体。
console.log();
alert(); --> alert("弹出内容");
document.write();
parseInt(xxx);
parseFloat()
prompt()
2.2、定义函数
定义函数的过程:封装
1、语法
关键字:function
function 函数名(){
//多条语句
}
定义一个函数,功能为, 在控制台上打印输出 Hello World
3、调用函数
直接使用 函数名() 进行调用
1、任何一个位置处
2、通过HTML元素事件来调用
4、参数
语法:function 函数名(参数列表){
参数列表:用,隔开的多个变量名(参数名)
}
function zhaZhiJi(fruit){
console.log("传递过来的水果是:" + fruit);
}
1、分支结构
1、运算符 - 比较运算符
> , < , >= , <= , == , !=
>= : 3 >= 5 False
5 >= 5 True
== : 判断等于,判断两个操作数,是否相等,相等则为true,不等则为false
3 == 5 : False
3 == 3 : True
!= : 3 != 5 : True
"a" != "a" :False
以上运算符的返回值 全部为 boolean 类型
3、程序的流程控制
程序=数据结构 + 算法;
数据结构:程序运行中所需要的数据元素
算法:将要做的事情通过一系列的逻辑串起来
任何程序或算法都有结构:
1、顺序结构
代码从头到尾除注释以外,按照出现的顺序去执行
2、选择(分支)结构
根据条件判断哪一块的程序要被执行,哪一块的程序不被执行
3、循环结构
根据条件判断,反复的执行某一段程序
4、if语句
满足某个条件时,执行某些操作,不满足则不执行
语法:
if(条件){
//某些操作
}
当条件结果为 true 时,则执行if语句块中的语句
当条件结果为 false时,则不执行if语句块中的语句
一个条件一件事
if(){}
1、由比较运算符 组成的表达式 称为:条件表达式、逻辑表达式
2、if 条件中,如果不是boolean类型表达式,那么进行隐式转换
以下值中,都会默认转换为 false
if(0){}
if(0.0){}
if(null){}
if(undefined){}
if(NaN){}
if(""){}
var a = prompt("请输入一段话:"); 小括号里面都是false
if(a){
//语句块;
}
3、if 语句块 {} 的问题
当if语句块中【只有一条语句】时,{}可以省略
if(a){
console.log("Success !");
}
等价于
if(a)
console.log("Success!");
5、if - else结构
语法:
if(条件){
语句块1
}else{
语句块2
}
判断条件
如果条件的值为 true ,则执行语句块1
如果条件的值为 false,则执行语句块2
1、多重if结构
在一套完整结构中,允许判断多个条件,最终,最多只能选择一个条件去运行
语法:
if(条件1){
语句块1;
}else if(条件2){
语句块2;
}else if(条件3){
语句块3;
}else{
//以上条件都不满足的时候,最终执行的语句块(此块可选);
}
循环结构的执行步骤】
1、声明循环变量;
2、判断循环条件
3、执行循环体操作
4、更新循环变量
然后循环执行2-4,直到条件不成立时,跳出循环。
while循环()中的表达式,运算结果可以是各种类型,但是最终都会转为真假,转换规则同if结构:
var num = 1 ; //1、声明循环变量;
while (num){ //2、判断循环条件
document.write(num+"<br />");//3、执行循环体操作
num++;//4、更新循环变量
}
while循环特点:先判断在执行;
do-while循环特点:先执行,在判断;即使初始条件不成立;do-while循环也至少执行一次
【for循环】 1、for循环有三个表达式:① 声明循环变量 ②判断循环条件 ③ 更新循环变量; 三个表达式 用;分隔。 for循环三个表达式都可以省略,但是两个缺一不可 2、for循环的执行特点、先判断、再执行,与while相同。 3、for循环三个表达式都可以有多部分组成,第二部分多个判断条件&& ||链接,第一三部分用逗号分隔。
↓打印结果
【循环控制语句】
1、break:跳出本层循环,继续执行循环后面的语句。
如果循环有多层嵌套,则break只能跳出一层;
2、continue:跳过本次循环剩余的代码,继续执行下一次循环,
① 对于for循环,contiune之后执行的语句,是循环变量更新语句i++;
② 对于while、do-while循环,contiune之后执行的语句,是循环条件判断;
因为,使用这两个循环时,必须将contiune必须放到i++之后使用,否则contiune将跳过i++
导致死循环;