JavaScript入门
请永远保持一颗怀疑之心,因为文字所记录的,不一定是真实。---- 布拉德·瑞德
基础知识
变量
JavaScript定义变量时不需要指定其类型,用关键字var声明即可,变量名不能为JavaScript中的关键字,不能以数字开头;
var name;//声明变量name,未赋值的变量值均为undefined
var age=20;
var sex=’女‘;
输出
通常使用浏览器console控制台(浏览器中F12,选择console)调试JavaScript代码
//所有语言的入门仪式
console.log("Hello JavaScript")
//代码输入后 按下回车即可
输出变量
var name="JavaScript";
var sex;
console.log("Hello "+name);
//console.log(age);//未声明的变量 会报错
console.log(sex);//未赋值的变量 输出为undefined
注释
//单行注释
/*
多行注释
*/
数据类型
数值
JavaScript中数值没有int,float之分;统一用Number;使用和其他语言一样
var a=20; //整数
var b=20.0; //浮点数
var c=2.0e1; //科学计数法
var d=NaN; //非数字
var e=Infinity; //无穷大
console.log(a,b,c,d);
//所有的运算与其他语言一致
console.log("a+b:",a+b);
console.log("a-b:",a-b);
console.log("a*b:",a*b);
console.log("a/b:",a/b);
字符串
JavaScript和python一样,单引号和双引号都可用于标识字符串
var name='JavaScript'; //单引号
console.log(name);
name="JavaScript"; //双引号
console.log(name);
name="'字符串中有单引号'"
console.log(name);
name='"字符串中有双引号"'
console.log(name);
//通过转义字符\来取消单、双引号的意义
name='字符串\'中既有单引号\"\"又有双引号'
console.log(name);
多行字符串
//用反引号(位于tab键上)标识多行字符串(ES6标准,有些浏览器可能不支持)
var str=`多行
字符串
一`;
console.log(str);
//在每一行的后面加\n
var str='多行\n'+
'字符串\n'+
'二';
console.log(str);
模板字符串
ES6(需要浏览器支持才行)新增一种模板字符串来方便字符串拼接
var name="Maria";
var place="CSDN";
var str=`Hello ${name}, this is ${place}`;
console.log(str);
字符串索引
字符串和数组一样,可以通过索引来访问其中的元素
var str=`Hello, this is csdn`;
console.log(str[0],str[5]);
//超过索引的下标不会报错,返回值为undefined
console.log(str[str.length+1],str[str.length+1])
JavaScript中字符串不可变,直接对字符串元素进行修改后不会有任何效果
var str=`Hello, this is csdn`;
console.log(str[0],str[5]);
str[0]='M';
str[5]='o';
console.log(str[0],str[5]);
常用方法
这些方法不会改变源字符串的值,而是返回一个新的字符串
方法 | 作用 |
---|---|
toUpperCase() | 将字符串全变为大写 |
toLowerCase() | 将字符串全变为小写 |
indexOf() | 返回指定字符串在目标字符串中出现的位置 |
substring() | 返回指定索引区间的字符串 |
var str=`Hello, this is csdn !`;
//toUpperCase()
console.log(str.toUpperCase(),str);
//toLowerCase()
console.log(str.toUpperCase() ,str);
//indexOf() 返回的是c出现的索引
console.log(str.indexOf('csdn'),str);
//substring()
console.log(str.substring(0,5),str);
布尔值
JavaScript中undefined(未定义),null(空),false(bool中的false),0(数值0),NaN(非数值),""或’’(空字符串,引号间无内容)bool值为false,其余全为true
console.log(!!"");//!!转化为bool运算
console.log(!!'');
console.log(!!undefined);
console.log(!!null);
console.log(!!false);
console.log(!!0);
console.log(!!NaN);
布尔运算符
运算符 | 描述 |
---|---|
&&,与运算 | 双目运算符 参与运算的两个布尔值均为true,运算结果就为true |
||,或运算 | 双目运算符 参与运算的两个布尔值中有一个为true,运算结果就为true |
!,非运算 | 单目运算符,将参与运算的布尔值取反 |
比较运算符
常见的比较运算符有>,>=,<,<=;其按照逻辑返回true,false
console.log(2>1);//true
console.log(2>3);//false
相等运算符
运算符 | 描述 |
---|---|
== | 双等号在比较时会自动转换类型再进行比较 |
=== | 三等号不会自动转化类型,类型不一致就返回false;一致再比较值 |
console.log(false == 0); // true
console.log(false == ""); // true
console.log(false === 0);// false
console.log(false === ""); // false
NaN的判断不能用相等运算符,常用isNaN()判断
console.log(isNaN(NaN)); // true
不限小数在比较时,也不能直接用相等运算符,常求差的绝对值小于某个极小数
console.log(1/3==1-2/3) //false
console.log(1/3==1/3) //true
console.log(Math.abs(1/3-(1-2/3))<1e-10) //true
数组
JavaScript数组中可以存放任意类型
var array=[1,-1,1.0,'1',true,null,NaN,[1,2,3]];
console.log(array);
array.length
array.length,返回数组的长度,修改array.lenth会导致数组元素个数的变化
var array=[1,-1,1.0,'1',true,null,NaN];
console.log(array.length);
array.length=10 //加大length 未定义的元素为empty
console.log(array);
array.length=5 //减小length
console.log(array);
array[7]=7;
console.log(array);
常用方法
方法 | 作用 |
---|---|
indexOf() | 返回指定元素在数组中的索引 |
slice() | 截取指定索引部分的数组元素,并以新数组返回 |
push() | 在数组的末尾添加元素 |
pop() | 删除数组末尾的元素 |
unshift() | 在数组的头部添加元素 |
shift() | 删除数组的第一个元素 |
sort() | 按默认顺序对数组元素进行排序 |
reverse() | 反转数组元素 |
splice() | 从指定的索引开始删除若干元素,再从该位置添加若干元素 |
concat() | 在当前数组后面加上另一个数组,并返回组合之后的数组(原数组不变) |
join() | 将数组中每个元素用指定字符串连接起来并返回连接后的字符串 |
var array=[1,-1,1.0,'1',true,null,NaN];
/*
indexOf,slice,push,pop,unshift,shift
*/
console.log(array.indexOf(true)); //4
console.log(array.slice(2,4)); //索引从2到4不包括4 [1, "1"]
array.push('push'); //添加push元素到数组末尾
array.pop(); //删掉push元素
array.unshift('unshift'); //添加unshift元素到数组头部
array.shift(); //删除shift元素
/*
splice
*/
//删除索引从0开始的三个元素,并添加三个元素
array.splice(0,3,"Java","Pyhton","JavaScript"); //返回被删除的元素
//只删除 不添加
array.splice(0,3); //返回被删除的元素
//只添加 不删除
array.splice(0,0,"Java","Pyhton","JavaScript"); //返回[]
/*
concat join
*/
var arrayTest=['test'];
array.concat(arrayTest); //返回array数组后接上arrayTest的新数组
array.join('-'); //返回类似A-B-C-D的字符串
多维数组
数组元素中又有数组即为多维数组
var array=[1,[2,3,4],5];
console.log(array[1][0])//2
console.log(array[1][1])//3
console.log(array[1][2])//4
对象
JavaScript 中对象与python字典类似,由{}包含多个键值对(逗号隔开)组成
//定义一个person对象
var person={
name:'Maria',
age:20,
sex:"女"
};
console.log(person);
console.log(person.name); //通过.运算符访问属性
console.log(person.birthday); //不存在的属性 返回undefined
JavaScript 对象的属性可以动态增加或删除
var person={
name:'Maria'
};
console.log(person.age); //undefined
person.age=20;
console.log(person.age); //20
delete age; //返回被删掉属性的值 20
console.log(person.age); //undefined
delete birthday; //删除不存在的属性没有任何效果
in操作符 可用于判断某对象是否拥有某对象
var person={
name:'Maria'
};
console.log('name' in person); //true
console.log('age' in person); //false
对象会继承父对象的属性,如所有对象都含有object的属性;hasOwnProperty()用于判断是否是自身拥有的属性
var person={
name:'Maria'
};
console.log('name' in person); //true
console.log('age' in person); //false
console.log('toString' in person); //继承而来的 true
console.log(person.hasOwnProperty('name')); //true
console.log(person.hasOwnProperty('toString')); //false
条件判断
JavaScript中也是if–else;if–else if–else 与java相同
/*
if--else
*/
if(条件语句)
{
语句块;
}
else{
语句块;
}
/*
if--else if--else
*/
if(条件语句)
{
语句块;
}
else if(条件语句){
语句块;
}
else{
语句块;
}
注意: if elseif …… else 语句中,只要判断到某个条件成立之后就不会继续执行了。
循环
for循环
与java类似的for循环
var array=[10,11,12,13];
for(var i=0;i<array.length;i++)
{
console.log(array[i]);//循环输出数组中的值
//10 11 12 13
}
for in
若对对象进行遍历则会将其所有属性输出
var person={
name:'Maria',
age:20,
sex:"女"
};
for (var pro in person)
{
console.log(pro);//循环输出对象的属性
//name age sex
}
JavaScript中数组也是一个对象,数组中元素的索引就是其属性
var array=[10,20,30];
for (var index in array) {
console.log(index); // '0', '1', '2' 这里遍历得到的string
//console.log(typeof index); //typeof 用于判断类型
console.log(array[index]); // 10 20 30
}
while循环
与java一致
while(循环条件)
{
语句块;
}
do while循环
与java一致
do
{
语句块;
}while(循环条件);
Map
Map是ES6新引入的数据结构,与python中字典结构类似,使用比字典方便许多
var person=[['kangkang',14],['ben',13],['linda',15]];
var map1=new Map(person) //用二维数组初始化
console.log(map1.get('ben')) //用键来求值 13
var map2=new Map() //定义一个空Map
map2.set('xiaoming',12); //添加键值对到Map中
map2.set('xiaoming',15); //对同一个key多次赋值,其value为最后一次的值
map2.get('xiaoming'); //15
map2.delete('xiaoming'); //删除该key-value对
Set
Set是ES6新引入的数据结构,Set中只有key没有value;set不会存放重复元素
//初始化与Map类似,用数组或空Set
var set1 = new Set(); // 空Set
var set2 = new Set([1, 2, 3]); // 数组
set1.add(4); //添加元素
set1.delete(4); //删除元素
Iterable
for of
JavaScript中Array Map Set都属于iterable类型,iterable类型可用for of进行遍历
/*
Map
*/
var person=[['kangkang',14],['ben',13],['linda',15]];
var map1=new Map(person) //用二维数组初始化
for(var value of map1){
console.log(value) //['kangkang',14],['ben',13],['linda',15]
}
/*
Set
*/
var set1 = new Set([1, 2, 3]);
for(var value of set1){
console.log(value) //1,2,3
}
/*
Array
*/
var array=[10,20,30,40];
//for of 遍历数组的值
for(var value of array){
console.log(value) //10,20,30,40
}
//for in 遍历数组的属性
for(var index in array){
console.log(index) //0,1,2,3
}
注意: for in对数组遍历的属性,for of遍历的是数组元素的值
forEach()
iterable内置了forEach()方法,接受一个函数作为参数,每次迭代时自动回调该函数;
//Array
var array=[10,20,30];
array.forEach(function (element, index, array) {
// element: 指向当前元素的值 位置first
// index: 指向当前索引 位置second
// array: 指向Array对象本身 位置 third
//这三个参数位置在使用时需要对应好
console.log('element = ' + element + ', index = ' + index);
//lement = 10, index = 0 lement = 20, index = 1 lement = 30, index = 2
});
//Map
var person=[['kangkang',14],['ben',13],['linda',15]];
var map1=new Map(person)
map1.forEach(function (value, key, map) {
//value 当前键值对的值 位置first
//key 当前键值对的键 位置second
//map Map对象 位置third
console.log(value);
});
//Set
var set = new Set([1,2,3]);
set.forEach(function (element, sameElement, set) {
// element: 指向当前元素的值 位置first
// sameElement: 指向当前元素的值 位置second
// set: 指向Set对象本身 位置third
console.log(element); //1 2 3
});
注意: forEach官方的回调函数参数有三个,在使用时参数的个数没有限制,如果要使用到官方参数,则第一个参数就是element 元素的值,依次类推,比三个多了也没什么意义。
最后
可以关注一下我的公众号,最近开始写公众号,我会在上面分享一些资源和发布一些csdn上发布不了的干货;有问题也可以在公众号上留言
点个关注是对博主最大的支持