变量声明:
一般使用:var(可表示任意类型的变量)
只在{}内生效时:let与const
1. Javascript的数组可以包括任意类型的数据类型。
2.通过arr.length = ?;(arr是一个数组 ?是一个值),会使数组的大小发生变化——可以增加数组长度,其中新增的未定义的变量使用“undefined”表示。同样使用索引赋值时,如果索引超过了范围,Array的大小会增大到满足条件的大小。
常用方法:(下面的方法均以例子给出,如有不解请自行详细百度)
indexOf(a):返回元素a在数组中的位置;
slice(0,3):截取下标0~3的数组; slice(3):截取下标3到末尾的数组
push('A','B'):向数组末尾添加A和B; pop():将数组的最后一个元素删除,并返回该元素
sort():对数组进行排序; reverse():将数组反转
splice(2,3,'A','b'):从下标2处开始删除3哥元素,再添加两个元素A,b;
concat('A',[1,2,3]):返回一个新数组,在当前数组的基础上连接'A',1,2,3;
join(‘-’):将当前数组的每个元素用“-”连接起来;
map(fun):对数组中的每个函数调用函数fun,并返回更改后的数组;
var person = {
name:'Bob',
age:20,
tag:['js','web'],
city:'Beijing',
hasCar:true,
}
赋值用“:”
可以通过对象变量["属性名"]的方式访问对象;
person["name"];//'Bob'
操作特点:在操作时可以动态添加属性
person.Sex;//undefined
person.Sex = 18;//新增一个Sex属性
delete person.sex;//删除Sex属性
常用方法:'Sex' in person; 在person中检测是否拥有Sex属性,返回true或false
hasOwnProperty('Sex');检测Sex属性是否是自身拥有,而不是继承得到的。
1. 比较运算符:
false == 0;//true
false === 0;//false
"=="比较运算符,会自动转换数据类型,会得到诡异的结果。
"==="比较运算符,不会自动转换数据类型,如果数据类型不一致,返回false;如果一致,再进行比较
因此,在使用比较运算符时,尽量使用"==="。
(2)NaN
判断NaN的方法:通过isNaN()函数,如果使用NaN===NaN,会返回false;
isNaN(NaN);//true
NaN === Nan;//false
(3)浮点数的相等比较
1/3 === (1 - 2/3);//false
Math.abs(1/3 - (1 - 2/3)) < 0.0000001;//true
两个浮点数不能直接比较,要计算两者的差值,判断是否小于某个阈值;
基本语法与C语言,Java差不多。但需要强调一下“for ... in”循环
var o = {
name :'Jack',
age: 20,
city:'Beijing'
}
for(var key in o){
console.log(key);//'name','age','city'
console.log(o[key]);//'Jack',20,'Beijing'
}
var m = new Map([['小米',55],['Jack',88]]);
m.set('张三',67);
m.set('李四',90);
m.has('张三');//是否存在key'张三':true
m.get('张三');//67
m.delete('张三');//删除key'张三'
m.get('张三');//undefined
var s = new Set([1,2,3,3,'3']);//重复过滤s = {1,2,3,'3'}
s.add(4);//s = {1,2,3,'3',4}
s.delete(3);//s = {1,2,'3',4}
s.delete(5);//没有相应的key也不会报错
数组,Map和Set均属于iterable类型,iterable类型的集合使用for ... of 循环来遍历。
var m = new Map([['小明',65],['张三',86],['李四',55]]);
for(var x of m){
console.log(x);//依次输出['小明',65],['张三',86],['李四',55]
}
1. 定义函数 (1)function 函数名(参数)
(2) 函数名 = function (参数)
function abs(x){
if(x >= 0){
return x;
}else{
return -x;
}
}
var abs = function(x){
if(x >= 0){
return x;
}else{
return -x;
}
};
//这种定义方式,按照语法规则,需要在函数体后加“;”
特点:Javascript允许传入任意个参数而不影响调用,因此传入的参数比定义的参数多也没问题,尽管函数内部不需要这些函数参数。传入的参数少也没问题,此时需要的参数将以undefined传入。
console.log(abs());//此时参数传入的是undefined,输出NaN
次数如果要需要函数内判断,需要将函数改为:
function abs(x){
if(typeof x != 'number'){
throw 'Not a number';//抛出异常,终止运行
}
if(x >= 0){
return x;
}else{
return -x;
}
}
2.引用函数
如果需要在另一个文件中使用本文件中定义的函数,需要如下步骤:
1)在本文件中暴露要导出的函数
//暴露format方法
module.exports = {
abs:abs
}
2)在要导入的文件内,导入和使用
//导入函数所在文件
//导入方法1
var home = require('../../home/home.js');
//导入方法2
import home from '../../home/home.js';
//使用
home.abs(..)
3.新增参数
(1)arguments参数
该参数只在函数内部起作用,它类似一个数组,包含传入的所有参数。
利用该参数常判断传入参数的个数,从而实现“设置可选参数”的目的。
(2)rest参数
当传入的参数多于所需参数时,多余的参数将以数组的形式交给rest。
4. 常见问题
Javascript有一个“在行末自动添加分号”的机制。由于该种机制,类似于下面的语句就会出现错误
for(i = 0; i < 10; i++)
console.log(name);
return 0;
在for循环一行的末尾自动添加了“;”,使得“console.log(name);”被忽略,偏离了原来的目的。
所以在Javascript编程中,时刻记得加“{}”和“;”
5.方法
在一个对象中绑定函数(实际就是将对象中的某个属性对应一个函数,或者直接在其后面写一个函数),这个函数称之为这个对象的方法。类似与Java中一个类里面的方法,与其类似的还有一个“this”变量,指向当前的对象。
console.log(zhangsan.age());//18
var zhangsan{
age:function (){
return 18;
}
}
this的使用时需要注意,函数的定义位置与使用对象。
定义位置不同,使用对象不同时,函数中的this指向是不同的。使用方法的结果也大相径庭,还会出现无指向的错误。
特别地,可以使用apply()函数来控制this的指向,当需要使用时,详情自行百度。
6. 箭头函数
x => x*x
//相当于
function (x){
return x * x;
}
A = 参数 => {参数使用},A是返回值
typeof 123;//'number'
typeof NaN;//'number'
typeof 'str';//'string'
typeof true;//'boolean'
typeof undefined;//'undefined'
typeof Math.abs;//'function'
typeof null;//'object'
typeof [];//'object'
typeof {};//'object'
Javascript常用对象(此处仅简单介绍用处,详情自行百度)
(1)Date 日期
(2)RegExp 用于字符串匹配,在开发中用来检验字符串合法性
(3)JSON 用于网络传输中,进行数据交换
(4)Math 数学函数集合