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

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

var num = 0;
var a = ++num;
console.log(a); // 1
console.log(num); // 1
//num先自加1,再赋值给a
++放在后面,并进行赋值:先赋值,后累加
var num = 0;
var a = num++;
console.log(a); // 0
console.log(num); // 1
//先把num的值赋值给a,num再自加1

3. delete

删除数组或对象中特定索引的值
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 ]

4.

将值转为原始值,ToPrimitive()。

将值转为数字,ToNumber()。

将值转为字符串,ToString()。

5. PreferredType转换策略

如果PreferredType被标记为Number,则会进行下面的操作流程来转换输入的值。

1、如果输入的值已经是一个原始值,则直接返回它
2、否则,如果输入的值是一个对象,则调用该对象的valueOf()方法,
如果valueOf()方法的返回值是一个原始值,则返回这个原始值。
3、否则,调用这个对象的toString()方法,如果toString()方法返回的是一个原始值,则返回这个原始值。
4、否则,抛出TypeError异常。

  • 如果PreferredType被标记为String,则会进行下面的操作流程来转换输入的值。

1、如果输入的值已经是一个原始值,则直接返回它
2、否则,调用这个对象的toString()方法,如果toString()方法返回的是一个原始值,则返回这个原始值。
3、否则,如果输入的值是一个对象,则调用该对象的valueOf()方法,
如果valueOf()方法的返回值是一个原始值,则返回这个原始值。
4、否则,抛出TypeError异常。

注意:

​ PreferredType的值会按照这样的规则来自动设置:

​ 1、该对象为Date类型,则PreferredType被设置为String

​ 2、否则,PreferredType被设置为Number

案例
[] + [] // ""

进行ToPrimitive,两个都是Array对象,不是Date对象,所以以Number为转换标准,所以先调用valueOf(),结果还是[ ],不是原始值,所以继续调用toString(),结果是“”(空字符串)原始值,将“”返回。第二个[ ]过程是相同的,返回“”。加号两边结果都是String类型,所以进行字符串拼接,结果是“”。

[] + {} // "[object Object]"

进行ToPrimitive,依然是以Number为转换标准。
[ ]的结果是“”。
{ }先调用valueOf(),结果是{ },不是原始值,所以继续调用toString(),结果是“[object Object]”,是原始值,将“[object Object]”返回。
加号两边结果都是String类型,所以进行字符串拼接,结果是“[object Object]”。

{} + [] // 0

这道题按照上一题的步骤,讲道理的话,结果应该还是“[object Object]”,但结果却出人意料——显示的答案是0!
这是什么原因呢?js解释器会将开头的 {} 看作一个代码块,而不是一个js对象;原来{ } + [ ]被解析成了

{ };+[ ],前面是一个空代码块被略过,剩下+[ ]就成了一元运算。[ ]的原值是””, 将””转化成Number结果是

0。

{} + {} // "[object Object][object Object]"

在金丝雀版本的chrome浏览器和node中,结果符合预期。
结果是”object Object”。
在普通版本的chrome浏览器中结果是NaN。
这是为什么呢?原因是在node中会将以“{”开始,“}”结束的语句外面包裹一层( ),就变成了({ } + { }),结果就符合预期。而普通版本的chrome依然会解析成{};+{},结果就变成了NaN

6.可应用于任意数值。如果有一个操作数不是布尔类型,逻辑与就不一定返回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

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

如果两个或多个操作数都是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

7.! 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

**

8.

**

Number("123"); //123  如果仅包含数值,转换为对应的数值
Number("234.1"); //234.1 解析为对应的小数
Number("+12.1"); //12.1 首位为符号位,其余为为数值,转换为对应的数值
Number("1+2.3"); // NaN 符号位出现在其他位置,解析为NaN
Number("0xa"); //10 如果仅包含十六进制格式,转为为对应的十进制的值
Number("010"); //10【注意】不会当做八进制被解析,结果为10。
Number(""); // 0 空字符串被转换为0
Number("123ac"); // NaN 包含其他字符: NaN
Number(12); //12
parseInt()函数

如果转换的值是null,undefined,boolean,均转换为NaN

如果转换的值是Number

parseInt(10); //10 如果是整数值,原样输出 parseInt(10.3); //10 如果是小数,舍去小数点一级后面的内容

如果转换的值是string

parseInt("123"); //123;如果仅包含数值,转换为对应的数值
parseInt("234.1"); //234;小数点后面的数值省略
parseInt("+12.1"); //12; 首位为符号位,其余为为数值,转换为整数
parseInt("1+2.7"); //1; 符号位出现在其他位置,保留符号位前面的数值
parseInt("0xa"); //10; 如果仅包含十六进制格式,转为为对应的十进制的值
parseInt("010"); //10; 【注意】不会当做八进制被解析,结果为10
parseInt(""); //NaN;空字符串被转换为NaN
parseInt("123ac"); //123;如果首位为数值,依次向后解析,找到连续的数值,直到遇到第一个非数值的,将之前获取的数值转换为Number返回 parseInt("123ac"); //123;
parseFloat()函数

如果转换的值是null,undefined,boolean,均转换为NaN

如果转换的值是Number

parseFloat(10); //10 如果是整数值,原样输出 parseFloat(10.1); //10.1 如果是小数,保留小数点,但是如果是10.0结果为10

如果转换的值是string

parseFloat("123"); //123;如果仅包含数值,转换为对应的数值
parseFloat("234.1"); //234.1;保留小数点后面的数值
parseFloat("+12.1"); //12.1; 首位为符号位,其余为为数值,转换为整数
parseFloat("1+2.6"); //1;符号位出现在其他位置,保留符号位前的数值
parseFloat("0xa"); //0; 【注意】不会当做十六进制来解析。
parseFloat("010"); //10; 【注意】不会当做八进制被解析,结果为10
parseFloat(""); //NaN;空字符串被转换为NaN
parseFloat("123.3ac"); //123.3;如果首位为数值,依次向后解析,找到连续的数值,直到遇到第一个非数值的,将之前获取的数值转换为Number返回 parseFloat("123.3ac");//123.3;

操作符【易混淆易记错】相关推荐

  1. 【C语言】易错题 and 易混淆知识

    C语言 易错题 and 易混淆知识 1. 以下关于指针的说法,正确的是( ) 2. 由多个源文件组成的C程序,经过**编辑.预处理.编译.链接**等阶段会生成最终的可执行程序.下面哪个阶段可以发现被调 ...

  2. 计算机信息处理技术的基础知识列举出一些易错易混淆知识点,计算机考证实训报告指导书.doc...

    计算机考证实训报告指导书 实训目的: 掌握计算机信息处理与应用的基础知识,掌握以Windows XP和Microsoft Office 2003为工作平台,应用计算机高效率.高质量地进行信息处理的基本 ...

  3. 【C#小知识】C#中一些易混淆概念总结(三)---------结构,GC,静态成员,静态类...

    目录: [C#小知识]C#中一些易混淆概念总结 [C#小知识]C#中一些易混淆概念总结(二) ---------------------------------------分割线----------- ...

  4. 【C#小知识】C#中一些易混淆概念总结(七)---------解析抽象类,抽象方法

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...

  5. C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用...

    这几天一直在复习C#基础知识,过程中也发现了自己以前理解不清楚和混淆的概念.现在给大家分享出来我的笔记: 一,.NET平台的重要组成部分都是有哪些 1)FCL (所谓的.NET框架类库) 这些类是微软 ...

  6. in作为介词的用法_英文论文写作:极易混淆的短语用法汇总如下

    本文来源:科袖网在英语中,介词和介词短语的应用是极其广泛的.首先,不及物动词不能直接取得宾语,它只有借助于介词构成动词短语方可取得宾语,这样就形成了不及物动词与介词的固定动词短语.其次,介词本身不能单 ...

  7. 不能混淆_生物易混淆知识点小汇总,是你不能混淆的知识哦丨高中

    点击蓝字 关注我们 别说你全知道哦 咩咩准备的可是易混淆汇总 一. 类脂与脂类  脂类:包括脂肪.固醇和类脂,因此脂类概念范围大. 类脂:脂类的一种,其概念的范围小. 二. 纤维素.维生素与生物素 纤 ...

  8. JAVA WEB部分易混淆问题总结

    2019独角兽企业重金招聘Python工程师标准>>> 前言 最近在看了一些java基础问题,顺便将这段时间看到的容易混淆和已忘记的问题进行整理总结一下. 接下来会再写一些数据库方面 ...

  9. python编程基础(四):编程习惯、代码规范、易混淆之处

    目录 编程习惯 代码规范 python中self的作用 易混淆之处 编程习惯 1. 添加主函数if __name__ == 'main': 2. 使用project_path = os.getcwd( ...

最新文章

  1. 欧文分校计算机新sat多少分录取,加州大学欧文分校SAT成绩要求是多少?
  2. 442. Find All Duplicates in an Array
  3. 【今日CV 计算机视觉论文速览】 11 Mar 2019
  4. ChannelHandler 与 ChannelPipeline 详解
  5. 线性代数-求解地球法线
  6. 鸟哥的Linux私房菜第零章
  7. 专注于分享,米狗网!
  8. Flink DataStream 关联维表实战
  9. linux中posix共享内存,Linux 共享内存(POSIX)
  10. 第一章 为什么我们对机器学习感兴趣?(二)
  11. 小白如何连续两年美赛斩获M奖
  12. ios9与ios8的区别
  13. 动态分级存储特性-SmartTier
  14. 四旋翼飞行器教学笔记2 —— 飞行器de姿态读取 1
  15. 不懂编程?节点包来凑——Dynamo常用节点包推荐(下)
  16. 浅谈SEO的优化问题
  17. python定位二维码_python实现二维码、条形码识别
  18. oracle裁员原因_甲骨文中国裁员 部分员工不满补偿方案
  19. C#中的递归APS和CPS模式详解(转载)
  20. Rust学习第九天——控制测试运行

热门文章

  1. OC之block使用场合
  2. android 图片自适应,完美适配各分辨率手机
  3. Css---去除点击表单输入框后出现的原生边框
  4. C++虚函数继承与虚继承
  5. spring boot获取spring容器中的bean对象
  6. 攻克 Transformer 之代码精讲+实战,以及《变形金刚》结构
  7. python对excel两列求和写入另一列_python读取excel指定列数据并写入到新的excel方法...
  8. 【机器学习】Logistic回归---学习笔记(重新整理)
  9. Unity中的UGUI源码解析之图形对象(Graphic)(2)-ICanvasElement
  10. 基于matlab的离散系统变换域分析实验,数字信号处理实验 离散时间系统的变换域分析.docx...