1.数据类型
判断一个变量是非为非数字类型isNaN()
转换为字符串
方式 说明 案例 toString() 转成字符串 var num= 1; alert(num.toString()); String()强制转换 转成字符串 var num = 1; alert(String(num)); 加号拼接字符串 和字符串拼接的结果都是字符串 var num = 1; alert(num+“我是字符串”);
转换为数字型
方式 说明 案例 parselnt(string)函数 将string类型转成整数数值型 parselnt(78’) parseFloat(string)函数 将string类型转成浮点数数值型 parseFloat(‘78.21’) Number()强制转换函数 将string类型转换为数值型 Number(‘12’) js隐式转换(- * / ) 利用算术运算隐式转换为数值型 ‘12’-0
前置递增运算符 ++ 写在变量前面(先自加,后返回值)
后置递增运算符 ++ 写在变量后面(先返回值,后自加)
短路运算:当有多个表达式(值)时,左边的表达式可以确定结果时,就不再继续运算右边的表达式的值。
逻辑与短路运算:如果表达式1 结果为真,则返回表达式2;如果表达式1结果为假,则返回表达式1。
(0、‘’、null、underfined、NaN为假)
逻辑或短路运算:如果表达式1 结果为真,则返回表达式1;如果表达式1结果为假,则返回表达式2。
eg: var num = o;console. log ( 123 || num++);console. log (num) ;–>num输出为0,中断不执行
优先级 运算符 顺序 1 小括号 () 2 一元运算符 ++ – ! 3 算数运算符 先 * / % 后 + - 4 关系运算符 > >= < <= 5 相等运算符 == != === !== 6 逻辑运算符 先 && 后 7 赋值运算符 = 8 逗号运算符 ,
1.1函数形参实参个数匹配
参数个数 说明 实参个等于形参个数 输出正确结果 实参个数多于形参个数 只取到形参的个数 实参个数小于形参个数 多的形参定义为undefined,结果为NaN
break :结束当前的循环体(如for、while)
continue :跳出本次循环,继续执行下次循环(如for、while)
return :不仅可以退出循环,还能够返回return语句中的值,同时还可以结束当前的函数体内的代码
return :后面的代码不会执行;返回的结果是最后一个值(可以写成数组形式);如果函数没有return则返回undefined
2.作用域链
内部函数访问外部函数的变量,采取的是链式查找的方式来决定取那个值,这种结构我们称为作用域链(三个字)。
3.预解析
1.我们js引擎运行js分为两步:预解析代码执行
(1)、预解析 js引擎会把js里面所有的 var还有function提升到当前作用域的最前面
(2)、代码执行―按照代码书写的顺序从上往下执行
2.预解析分为变量预解析(变量提升)和函数预解析(函数提升)
(1)、变量提升就是把所有的变量声明提升到当前的作用域最前面,不提升赋值操作
(2)、函数提升就是把所有的函数声明提升到当前作用域的最前面,不调用函数
函数表达式:调用必须写在函数表达式的下面。
4.创建对象
对象字面量︰就是花括号{}里面包含了表达这个具体事物(对象)的属性和方法。
{}里面采取键值对的形式表示
键:相当于属性名
值∶相当于属性值,可以是任意类型的值(数字类型、字符串类型、布尔类型,函数类型等)
4.1对象的调用
对象里面的属性调用:对象.属性名,这个小点.就理解为“的”
对象里面属性的另一种调用方式:对象[‘属性名’],注意方括号里面的属性必须引号
对象里面的方法调用:对象.方法名(),注意这个方法名字后面一定加括号
4.2构造函数的语法格式
function 构造函数名() {
this.属性=值;
this.方法= function() {}
}
new构造函数名();
function Star(uname, age, sex) {
this.name = uname;
this.age = age;
this.sex = sex;
}
new Star("搞',18,'男");
1.构造函数名字首字母要大写
2.我们构造函数不需要return就可以返回结果
3.我们调用构造函数必须使用new
4.我们只要new Star() 调用函数就创建一个对象 ldh {}
5.我们的属性和方法前面必须添加this
遍历对象
for (var k in obj) {
console.log(k); //k 变量输出得到的是 属性名
console.log(obj[k]); //obj[k] 得到是 属性值
}//我们使用for in里面的变量我们喜欢写k或者key
4.3数组
arguments存储了传递的所有实参,只有函数才有arguments对象
1、是一个伪数组,具有数组的length属性
2、按照索引的方式进行存储的
3、它没有真正数组的一些方法 pop()、push()等等
检测是否为数组
(1) instanceof运算符它可以用来检测是否为数组
var arr = [];
var obj = {};
console.log(arr instanceof Array);
(2)Array.isArray(参数); H5新增的方法ie9以上版本支持
console.log(Array.isArray(arr));
增删数组元素
方法名 | 说明 | 返回值 |
---|---|---|
push(参数1…) | 末尾添加一个或多个元素,注意修改原数组 | 并返回新的长度 |
pop() | 删除数组最后一个元素,把数组长度减1、无参数、修改原数组 | 返回它删除的元素的值 |
unshift(参数1…) | 向数组的开头添加一个或更多元素,注意修改原数组 | 并返回新的长度 |
shift() | 删除数组的第一个元素,数组长度减1、无参数、修改原数组 | 并返回第一个元素的值 |
数组排序
方法名 | 说明 | 是否修改原数组 |
---|---|---|
reverse() | 颠倒数组中元素的顺序,无参数 | 该方法会改变原来的数组,返回新数组 |
sort() | 对数组的元素进行排序 | 该方法会改变原来的数组,返回新数组 |
var arr = [13, 4, 77, 1, 7];
arr.sort(function(a, b) {
//return a - b;升序的顺序排列
return b - a; //降序的顺序排列
});
console.log(arr);
数组索引
方法名 | 说明 | 返回值 |
---|---|---|
indexOf() | 数组中查找给定元素的第一个索引 | 如果存在返回索引号,如果不存在则返回-1 |
lastlndexOf() | 在数组中的最后一个的索引 | 如果存在返回索引号,如果不存在则返回-1 |
数组转换为字符串
方法名 | 说明 | 返回值 |
---|---|---|
toString() | 把数组转换成字符串,逗号分隔每一项 | 返回一个字符串 |
join(‘分隔符’) | 方法用于把数组中的所有元素转换为一个字符串 | 返回一个字符串 |
方法名 | 说明 | 返回值 |
---|---|---|
concat() | 连接两个或多个数组不影响原数组 | 返回一个新的数组 |
slice() | 数组截取slice(begin, end) | 返回被截取项目的新数组 |
splice() | 数组删除splice(第几个开始,要删除个数) | 返回被删除项目的新数组。注意,这个会影响原数组 |
4.4字符串
基本包装类型
var str = 'andy ";
console.log(str.length);
对象才有属性和方法复杂数据类型才有属性和方法
基本包装类型:就是把简单数据类型包装成为了复杂数据类型
(1)把简单数据类型包装为复杂数据类型
var temp = new String( ’ andy ');
(2)把临时变量的值给str
str = temp;
(3)销毁这个临时变量temp = null;
查找字符
方法名 | 说明 | 使用 |
---|---|---|
charAt(index) | 返回指定位置的字符(index字符串的索引号) | str.charAt(O) |
charCodeAt(index) | 获取指定位置处字符的ASCII码(index索引号) | str.charCodeAt(O) |
str[index] | 获取指定位置处字符 | HTML5,IE8+支持和charAt()等效 |
拼接以及截取字符串
方法名 | 说明 |
---|---|
concat(str1,str2,str3…) | concat()方法用于连接两个或多个字符串。拼接字符串,等效于+,+更常用 |
substr(start,length) | 从start位置开始(索引号) , length 取的个数 重点记住这个 |
slice(start, end) | 从start位置开始,截取到end位置,end取不到(他们俩都是索引号) |
substring(start, end) | 从start位置开始,截取到end位置,end取不到 基本和slice相同但是不接受负值 |
字符串转换为数组
1、替换字符 replace (‘被替换的字符’,‘替换为的字符’)它只会替换第一个字符
2、字符转换为数组split(‘分隔符’)
简单类型与复杂类型
1、值类型∶简单数据类型/基本数据类型,在存储时变量中存储的是值本身,因此叫做值类型string , number , boolean , undefined , null(返回的是一个空的对象 object)
2、引用类型∶复杂数据类型,在存储时变量中存储的仅仅是地址(引用),因此叫做引用数据类型通过new关键字创建的对象(系统对象、自定义对象),如Object、Array、Date等
堆和栈的区别
1、栈(操作系统):由操作系统自动分配释放存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈;简单数据类型存放到栈里面
2、堆(操作系统):存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收。复杂数据类型存放到堆里面
简单与复杂数据类型
1.简单数据类型是存放在栈里面里面直接开辟一个空间存放的是值
2.复杂数据类型首先在栈里面存放地址十六进制表示然后这个地址指向堆里面的数据
(1)、简单类型的传参:函数的形参也可以看做是一个变量,当我们把一个值类型变量作为参数传给函数的形参时,其实是把变量在栈空间里的值复制了一份给形参,那么在方法内部对形参做任何修改,都不会影响到的外部变量。
(2)、复杂类型的传参:函数的形参也可以看做是一个变量,当我们把引用类型变量传给形参时,其实是把变量在栈空间里保存的堆地址复制给了形参,形参和实参其实保存的是同一个堆地址,所以操作的是同一个对象。