JavaScript常见的考点以及容易混淆的知识点---Day02

目录

一、引用数据类型:

二、类型判断:

三、深拷贝与浅拷贝:

四、操作符 :

        1.算数运算符:

        2.一元运算符 :

           3.赋值运算符

        4.比较运算符

        5.逻辑运算符:

                6.三目运算符


一、引用数据类型:

        1.对象Object:

                对象是模拟现实生活的对象,对象由键值对组成,通过使用大括号将所有键值对括起来。

var dog = {
	name: 'momo',
	age: 4
}

                 可以通过点语法获取对象的属性

dog.name; //momo
dog.age;	//age

        2.数组Array

                数组是一个特殊的对象,包含了多个值,值与值之间使用逗号分隔开,所有的值通过中括号括起来。

var classArr = ['web2104','web2105','web2106']
var studentArr = ['zhangsan','lisi','wangwu']

                可以通过数组下标获取对应的数据

classArr[0]; // web2104

        3.函数Function

                函数是代码执行单元,用于实现某些特殊的功能。

function sum(a, b) {
  return a + b;
}
//执行函数
sum(1,2); // 3

二、类型判断:

        1.typeof:

               (1) 使用typeof判断数据类型

                (2)返回该变量名所指向数据的类型

                (3)语法: typeof 变量名 返回值如下:

                                         "undefined" 未定义

                                        "boolean" 布尔类型

                                        "string" 字符串

                                        "number" 数值

                                        "object" 对象或者null或者数组 "function" 函数

三、深拷贝与浅拷贝:

        主要针对于引用数据类型参数说的,浅拷贝表示仅拷贝引用地址,深拷贝表示对于对象的克隆。        

        实现深拷贝的方法

  • 通过json对象实现深拷贝(JSON.stringify,JSON.parse)

  • Object.assign()拷贝

  • lodash函数库实现深拷贝

  • 递归的方式实现深拷贝

  • 等等

四、操作符 :

        1.算数运算符:

运算符描述举例结果
+加法var num = 1 + 2;3
-减法var num = 5 - 4;1
*乘法var num = 1 * 2;2
/除法var num = 1 / 2;0.5
%取余var num = 1 % 2;1

                1.1正常的数据运算 :

var num1 = 8;
var num2 = 4;

console.log(num1 + num2); //12
console.log(num1 - num2); //4
console.log(num1 / num2); //2
console.log(num1 * num2); //32
console.log(num1 % num2); //0

                1.2进行数据运算时,除‘+’ 外,其他运算符可以将字符串数字隐形转成数字

var num1 = '8';
var num2 = '4';

console.log(num1 - num2); //4
console.log(num1 / num2); //2
console.log(num1 * num2); //32
console.log(num1 % num2); //0

        2.一元运算符 :

常见运算符描述
+将操作数转换成数字,字符串的拼接
-将操作转换成数字,同时变为负数
逻辑取反运算符
++递增
- -递减
delete删除数组或对象中特定索引的值
typeof操作数放到typeof的后面,会返回当前操作数的类型,对于数值类型可以准确返回,对于引用类型,Function会返回'function',其他都只会返回'object'
voidvoid 运算符对任何值返回 undefined。

                        2.1    +(正号) :

                                (1)‘+’的第一种用法:进行数据相加

var num1 = 3;
var num2 = 5;
var sum = num1 + num2; //8

                                (2)‘+’放在数据的前面,就是取正数

var num = 6;
console.log(+num); // 6

                                (3)‘+’与字符串运算时,就是字符串连接符

var a = 'hello';
var b = 'world';
console.log(a + b); // helloworld

                                (4)‘+’可以将数字字符串或布尔类型等隐式转换成number类型

var a = '123';
var b = true;
var m = false;
console.log(+a, +b, +m); // 123  1   0

                      2.2    -   (负号)

                                (1) 正、负号可以对数字进行取正或取负,其他运算符不能转换

var num1 = 6;
var num2 = -6;
console.log(-num1); //-6
console.log(+num1); //6
console.log(-num2); //6
console.log(+num2); //-6

                                 (2)正、负号可以将字符串隐式转换为数字

var num1 = '20';
var num2 = '-20';
console.log(-num1); //-20
console.log(+num1, typeof +num1); //20 number
console.log(-num2); //20
console.log(+num2, typeof +num2); //-20 number

                        2.3  !(取反)

                                        经常被用作条件判断时的取反操作,类型判断的等,还可以用“!”将变量转换为Boolean类型

var a;
if (!a) {}
console.log(!null);  //true
console.log(!undefined);  //true
console.log(!''); //true
console.log(!100);  //false
console.log(!'abc');  //false

                        2.4 ++(递增)

                                通常用于循环语句,动画操作等。

                                (1)++放在前面,并进行赋值:先累加,后赋值

var num = 0;
var a = ++num;
console.log(a); // 1
console.log(num); // 1
//num先自加1,再赋值给a

                                (2)++放在后面,并进行赋值:先赋值,后累加

var num = 0;
var a = num++;
console.log(a); // 0
console.log(num); // 1
//先把num的值赋值给a,num再自加1

                        2.5   -- (递减):

                                通常用于循环语句,动画操作等。与++类似

                        2.6     delete:

                                (1)删除数组或对象中特定索引的值

        

var obj = {
  name:'zhangsan',
  age: 17
};
delete obj.name;
console.log(obj); // {age: 17}

var arr = [1,2,3,4,5];
delete arr[2];
console.log(arr); //[ 1, 2, <1 empty item>, 4, 5 ]

                        2.7 typeof

                              操作数放到typeof的后面,会返回当前操作数的类型,对于数值类型可以准确返回,对于引用类型,Function会                         返回'function',其他都只会返回'object'     

     

var obj = {
  name:'zhangsan',
  age: 17
};
var arr = [1,2,3,4,5];
console.log(typeof obj, typeof arr); //object object

           3.赋值运算符

运算符例子等同于
=x=yx=y
+=x+=yx=x+y
-=x-=yx=x-y
*=x*=yx=x*y
/=x/=yx=x/y
%=x%=yx=x%y

                        3.1 = 赋值运算符向变量赋值

var x = 7;

                        3.2 += 赋值运算符向变量添加值

var x = 7;
x += 8; 

                        3.3-= 赋值运算符从变量中减去一个值。

var x = 7;
x -= 8; 

                        3.4*= 赋值运算符相乘变量。

var x = 7;
x *= 8; 

                        3.5 /= 赋值运算符对变量相除。

var x = 7;
x /= 8; 

                        3.6%= 赋值运算符把余数赋值给变量。

var x = 7;
x %= 8; 

        4.比较运算符

                比较运算符在逻辑语句中使用,以判定变量或值是否相等。通常用于条件判断语句中。

                比较运算符的优先级低于算术运算符,高于赋值运算符运算结果一般都为boolean

运算符描述比较返回
==等于x == 5true
x == “5”true
===值相等并且类型相等x === 5true
x=== “5”false
!=不相等x  ! = 8true
!==值不相等或类型不相等x  !== 5false
x !== "5"true
x !== 8true
>大于x >8false
<小于x <8true
>=大于或等于x >= 8false
<=小于或等于x <= 8true

                4.1 ==  

                       等同 的意思, 两边值类型不同的时候,要先进行类型转换为同一类型后,再比较值是否相等。

// 常用于相同类型的值的比较
console.log(123 == 345);  //false
console.log('123' == '345');  //false
// 如果两个值类型不同,也有可能相等,需根据以下规则进行类型转换在比较
// 如果一个是null,一个是undefined,那么相等
console.log(null == undefined); //true
// 如果一个是字符串,一个是数值,把字符串转换成数值之后再进行比较
console.log(123 == '123');  //true
//如果是整数类型和boolean类型的数值进行比较,1和true使用==比较结果为true,0和false使用==比较结果也为true,其它都为false;可以理解记忆为使用==比较整数时将1等同true,将0等同false。
console.log(1 == true); //true
console.log(0 == false);  //true

                4.2 ===

                        恒等 的意思,不做类型转换,类型不同的结果一定不等。

        

// 如果类型不同,就一定不相等
console.log(123 === '123'); //false
// 如果两个都是数值,并且是同一个值,那么相等;如果其中至少一个是NaN,那么不相等。(判断一个值是否是NaN,只能使用isNaN() 来判断)
console.log(123 === 123); //true
console.log(123 === 10 / 'a');  //false
// 如果两个都是字符串,每个位置的字符都一样,那么相等,否则不相等。
console.log('hello' === 'hello'); //true
// 如果两个值都是true,或是false,那么相等
console.log(true === true); //true
console.log(1 === true);  //false
// 如果两个值都是null,或是undefined,那么相等
console.log(null === null); //true
console.log(null === undefined);  //false

                4.3双等和三等的区别

                        双等表示只要值相等即可为真,而三等则要求不仅值相等,而且也要求类型相同。

                        建议:尽量使用严格运算符 三等。因为"=="不严谨.

                4.4 注意:

                        (1)对于string,number等基础类型,双等和三等是有区别的

                                1)不同类型间比较,双等之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不等

                                2)同类型比较,直接进行“值”比较,两者结果一样

                        (2对于Array,Object等高级类型,双等和三等是没有区别的

                                进行“指针地址”比较

                        (3)基础类型与高级类型,双等和三等是有区别的

                                1)对于==,将高级转化为基础类型,进行“值”比较

                                2)因为类型不同,===结果为false

                4.5   !=

                        != 和 ==用法类似 比较若类型不同,先偿试转换类型,再作值比较,最后返回值比较结果 。

                4.6!==

                        !== 和 === 用法类似 只有在相同类型下,才会比较其值。

                4.7'>'和'<' 大于和小于

var a = 10;
var b = 20;
console.log(a > b); //false
console.log(a < b); //true

                4.8'>='和'<=' 大于等于和小于等于

var a = 10;
var b = 20;
console.log(a >= b); //false
console.log(a <= b); //true

               4.9非数值的情况下使用'>''<''>=''<='

                        (1)对于非数值进行比较时,会先将其转换为数值,然后再进行比较。

// true转换为数值是1 false转换为数值是0
console.log(1 > true); // 结果为false
console.log(1 >= true); // 结果为true
console.log(1 > '0'); // 结果为true
console.log(1 > null); // 结果为true
//任何值和NaN作比较结果都是false
console.log(1 > 'hello'); // 结果为false 任何值和NaN作比较结果都是false

                        (2)如果符号两侧都是字符串,不会将其转换为数值进行比较,而会分别比较字符串中字符的Unicode编码。 注意:所以在比较两个字符串型的数字时,一定要先转型。

console.log('134545353' > '5'); // 不转型则返回false
console.log('134545353' > +'5');// 这样结果才返回true

                         而在比较字符编码时,是一位一位进行比较的,如果符号两侧第一位一样,则比较下一位,所以借此可以用来对英文进行排序,而比较中文是没有意义的。

console.log('1' < '5'); // 结果为true
console.log('11' < '5'); // 结果也为true
console.log('be' > 'b'); // 结果为true 先比较第一位b的字符编码是一样的,再比较第二位,由于be有e,而b只有一位,所以be>b
console.log('be' < 'b'); // 结果为false

        5.逻辑运算符:

运算符描述例子
&&and(x < 10 && y > 1) 为 true
||or(x==5 || y==5) 为 false
!not!(x==y) 为 true

                5.1&& 与(同真才真,有假则假)

                        可应用于任意数值。如果有一个操作数不是布尔类型,逻辑与就不一定返回boolean类型

                        如果第一个操作数是null,NaN,undefined,false,0,""可被转换为false的值的时候返回该值

console.log(null && 'world'); //null

                        当第一个表达式为真,整个表达式的结果取决于第二个表达式,返回第二个表达式

console.log('hello' && 'world'); //world

                        当第一个表达式为假,整个表达式的结果就可以确定,返回第一个表达式

console.log(false && 'world'); //false

                        [null,NaN,undefined,false,0,""]直接返回该操作数

console.log(''&&123);  //''  空字符串
console.log(0&&null);  //0
console.log(123&&345); //345
console.log(123&&undefined); //undefined

                        5.2||(有真才真,同假则假)

                                如果两个或多个操作数都是null,NaN,undefined,false,0,""可被转换为false的值的时候返回该值。

console.log(null || false); //false

                                如果第一个操作数是null,NaN,undefined,false,0,"" 则返回第二个操作数。

console.log(null || 'hello'); //'hello'

                                如果第一个操作数是真,直接返回第一个操作数。

console.log(123||345);   //123

                                当第一个表达式为真,整个表达式的结果就可以确定,返回第一个表达式

                                当第一个表达式为假,整个表达式的结果取决于第二个表达式,返回第二个表达式

                                有一个为true结果就为true

                                同时为false结果才为false

                5.3!(NOT)

                        经常被用作条件判断时的取反操作,类型判断等,还可以用'!'将变量转换为Boolean类型

var a;
if (!a) {}
console.log(!null);  //true
console.log(!undefined);  //true
console.log(!''); //true
console.log(!100);  //false
console.log(!'abc');  //false

                6.三目运算符

                        JavaScript中的三目运算符用作判断时

                        基本语法为: expression ? sentence1 : sentence2

                        当expression的值为真时执行sentence1,否则执行 sentence2

var age = 19;
var result = age > 16 ? "成年人":"未成年人";
// 当age大于16岁时,条件为真,执行sentence1,其次反之

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值