目录
1.赋值运算符
运算符 | 例子 | 等同于 |
---|---|---|
= | x = y | x = y |
+= | x += y | x = x + y |
-= | x -= y | x = x - y |
*= | x *= y | x = x * y |
/= | x /= y | x = x / y |
%= | x %= y | x = x % y |
2.比较运算符
x = 5;
运算符 | 描述 | 比较 | 返回 |
---|---|---|---|
== | 等于 | x == 8 | false |
x == 5 | true | ||
x == "5" | true | ||
=== | 值相等并且类型相等 | x === 5 | true |
x === "5" | false | ||
!= | 不相等 | x != 8 | true |
!== | 值不相等或类型不相等 | x !== 5 | false |
x !== "5" | true | ||
x !== 8 | true | ||
> | 大于 | x > 8 | false |
< | 小于 | x < 8 | true |
>= | 大于或等于 | x >= 8 | false |
<= | 小于或等于 | x <= 8 | true |
== 双等运算符
等同 的意思, 两边值类型不同的时候,要先进行类型转换为同一类型后,再比较值是否相等。
console.log(5 == '5'); //true
console.log('8' == '1') // false
console.log(7 == 8); //false
console.log(null == undefined); //true
//说明true和false转换成Number类型对应的就是1和0
console.log(0 == false); //true
console.log(1 == true); //true
=== 三等运算符
恒等 的意思,不做类型转换,类型不同的结果一定不等。
console.log(5 === '5'); // false
console.log('8' === '1') // false
console.log(7 === 8); // false
console.log(5 === 5); // true
//如果两边都是字符串那么完全相等的字符串为true
console.log('hello' === 'hello'); // true
console.log(5 === 'hello'); // false
//双等中相等的值,在三等中不相等了,因为三等不进行类型转换了
console.log(true === true); //true
console.log(1 === true); //false
console.log(null === null); //true
console.log(null === undefined); //false
注意:
1、对于string,number等基础类型,双等和三等是有区别的
1)不同类型间比较,双等之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不等
2)同类型比较,直接进行“值”比较,两者结果一样
2、对于Array,Object等高级类型,双等和三等是没有区别的
进行“指针地址”比较
3、基础类型与高级类型,双等和三等是有区别的
1)对于==,将高级转化为基础类型,进行“值”比较
2)因为类型不同,===结果为false
!= 不相等
!= 和 ==用法类似 比较若类型不同,先偿试转换类型,再作值比较,最后返回值比较结果 。
!== 值不相等或类型不相等
!== 和 === 用法类似 只有在相同类型下,才会比较其值。
3.类型转换
字符串类型
toString()函数
通过toString()函数转换成字符串类型
可以通过传递参数转换成对应的2进制、8进制、16进制
var num = 10;
console.log(num.toString()); //"10"
console.log(num.toString(2)) //"1010"
console.log(num.toString(8)) //"12"
console.log(num.toString(16)) //"a"
布尔类型
Boolean()包装器
console.log(Boolean('hello')); //true
使用!!转换任意其他数据类型都可以转换为布尔类型。
console.log(!!'hello'); //true
数字类型
Number()包装器
如果转换的值是null,undefined,boolean,number
console.log(Number(true)); //1
console.log(Number(false)); //0
console.log(Number(null)); //0
console.log(Number(undefined)); //NaN
console.log(Number(10)); //10 如果是数字值,原样输出
当转换的是string类时
console.log(Number("123")); //123 如果仅包含数值,转换为对应的数值
console.log(Number("234.1")); //234.1 解析为对应的小数
console.log(Number("+12.1")); //12.1 首位为符号位,其余为为数值,转换为对应的数值
console.log(Number("1+2.3")); // NaN 符号位出现在其他位置,解析为NaN
console.log(Number("0xa")); //10 如果仅包含十六进制格式,转为为对应的十进制的值
console.log(Number("010")); //10【注意】不会当做八进制被解析,结果为10。
console.log(Number("")); // 0 空字符串被转换为0
console.log(Number("123ac")); // NaN 包含其他字符: NaN
console.log(Number(12)); //12
parseInt()函数
如果转换的值是null,undefined,boolean,均转换为NaN
如果转换的值是Number
console.log(parseFloat(10)); //10 //10.1 如果是小数,舍去小数点一级后面的内容 10
如果转换的值是string
console.log(parseInt("123")); //123;如果仅包含数值,转换为对应的数值
console.log(parseInt("234.1")); //234;小数点后面的数值省略
console.log(parseInt("+12.1")); //12; 首位为符号位,其余为为数值,转换为整数
console.log(parseInt("1+2.7")); //1; 符号位出现在其他位置,保留符号位前面的数值
console.log(parseInt("0xa")); //10; 如果仅包含十六进制格式,转为为对应的十进制的值
console.log(parseInt("010")); //10; 【注意】不会当做八进制被解析,结果为10
console.log(parseInt("")); //NaN;空字符串被转换为NaN
console.log(parseInt("123ac")); //123;如果首位为数值,依次向后解析,找到连续的数值,直到遇到第一个非数值的,将之前获取的数值转换为Number
parseFloat()函数
null,undefined,boolean, 转换的规则同parseInt(),都是转换成NaN
如果转换的值是Number()
parseFloat(10); //10 如果是整数值,原样输出 //10.1 如果是小数,保留小数点,但是如果是10.0结果为10
如果转换的值是string
console.log(parseFloat("123")); //123;如果仅包含数值,转换为对应的数值
console.log(parseFloat("234.1")); //234.1;保留小数点后面的数值
console.log(parseFloat("+12.1")); //12.1; 首位为符号位,其余为为数值,转换为整数
console.log(parseFloat("1+2.6")); //1;符号位出现在其他位置,保留符号位前的数值
console.log(parseFloat("0xa")); //0; 【注意】不会当做十六进制来解析。
console.log(parseFloat("010")); //10; 【注意】不会当做八进制被解析,结果为10
console.log(parseFloat("")); //NaN;空字符串被转换为NaN
console.log(parseFloat("123.3ac")); //123.3;如果首位为数值,依次向后解析,找到连续的数值,直到遇到第一个非数值的,将之前获取的数值转换为Number
+符号
console.log(+'123') //123
console.log(+null) //0
console.log(+true); //1
console.log(+false); //0
console.log(+'123.123'); //123.123
console.log(+'+123.123'); //123.123 首位是符号位,其余为数值,转换为对应的float类型
console.log(+'123+123.123'); //NaN
console.log(+'123+12ac'); //NaN
console.log(+'asdas'); //NaN
console.log(+''); // 0
console.log(+undefined) //NaN
console.log(+"0xa"); //10 将16进制转换成10进制
console.log(+"010"); //10 【注意】不会当做八进制被解析,结果为10
4.流程控制语句
分支语句
if语句
当if中的条件condition为真时,才会执行if中的语句
if(condition){
}
if else语句
只有当if的条件condition判断为真是才会执行if中的语句,否则将会执行else中的语句
当执行了if中的语句时就不会执行else中的语句了
//只有当if的条件判断为真是才会执行if中的语句,否则将会执行else中的语句
//当执行了if中的语句时就不会执行else中的语句了
if(condition){
}else{
}
if else if else语句
当if中的条件condition满足时会执行if中的语句,剩下的else if 和 else语句都将不会执行
当if中的条件不满足时,会判断 else if中的condition条件是否满足 满足将会执行其中的语句,剩下的判断语句都将不会执行
如果if 和 else if中的语句都没有满足条件的,那就会执行else中的语句
var a = 10;
if (a>1) {
console.log(1); //1
}else if(a>2){
console.log(2); //不打印
}else{
console.log(3) //不打印
}
if (a>10) {
console.log(1); //不满足条件
}else if(a>2){
console.log(2); //2
}else{
console.log(3) //不打印
}
if (a>10) {
console.log(1); //不满足条件
}else if(a>20){
console.log(2); //不满足条件
}else{
console.log(3) //3
}
switch语句
使用switch语句来进行不同的条件选择不同的语句执行
设置表达式 n(通常是一个变量)。随后表达式的值会与结构中的每个 case 的值做比较。如果存在匹配,则与该 case 关联的代码块会被执行。使用 break 来阻止代码自动地向下一个 case 运行。
switch(n)
{
case 1:
执行代码块 1
break;
case 2:
执行代码块 2
break;
default:
与 case 1 和 case 2 不同时执行的代码
}
注意:
-
case代码块中break不能省略
-
default可以放到代码任意位置,break不能省略,最后位置可以省略break;
-
变量与常量对比使用”===“
建议:
做等值比较的分支控制建议使用switch,非等值的判断建议使用If
循环语句
For 循环
语句 1 (代码块)开始前执行
通常我们会使用语句 1 初始化循环中所用的变量 (var i=0)。
语句 1 是可选的,也就是说不使用语句 1 也可以。
您可以在语句 1 中初始化任意(或者多个)值。
语句 2 定义运行循环(代码块)的条件
通常语句 2 用于评估初始变量的条件。
语句 2 同样是可选的。
如果语句 2 返回 true,则循环再次开始,如果返回 false,则循环将结束。
语句 3 在循环(代码块)已被执行之后执行
通常语句 3 会增加初始变量的值。
语句 3 也是可选的。
语句 3 有多种用法。增量可以是负数 (i--),或者更大 (i=i+15)。
语句 3 也可以省略(比如当循环内部有相应的代码时)。
for (var i=0; i<5; i++)
{
console.log(i);
}
增强版for循环
for(自定义变量名 in 数组/对象){
执行代码
}
“自定义变量名”用来指定是数组的元素索引,也可以是对象的属性
var arr=[10,'aa',20,30,40];
for(var i=0;i<arr.length;i++){
console.log(i+"--"+arr[i]);
}
for(var key in arr){
console.log(key+"--"+arr[key]);
}
while 循环
只要指定条件为 true,循环就可以一直执行代码块。
while (*条件*)
{
*需要执行的代码*
}
while (i<5)
{
console.log(i);
i++;
}
do/while 循环
do/while 循环是 while 循环的变体。该循环会在检查条件是否为真之前执行一次代码块,然后如果条件为真的话,就会重复这个循环。
该循环至少会执行一次,即使条件为 false 它也会执行一次,因为代码块会在条件被测试前执行:
do{
需要执行的代码
}
while (条件);
do{
console.log(i);
i++;
}
while (i<5);
递归
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
// 递归 通俗理解
// 函数自己调用自己 停不下来
// 需要有 跳出的条件 使用递归 求n的阶乘
function factorial(n) {
// 跳出条件
if (n == 1) {
return 1;
}
return factorial(n - 1) * n;
}
var result = factorial(4);
console.log(result);