专栏首页闻道于事JavaScript深入浅出补充——(一)数据类型,表达式和运算符

JavaScript深入浅出补充——(一)数据类型,表达式和运算符

项目基本做完,在进行下一阶段学习之前先看视频学习回顾一下JavaScript

一、数据类型

JavaScript中有五种原始类型和一种对象类型

JavaScript弱类型语言中隐式转换

num-0

字符串减去0,可以将字符串变量num转化为数字

num+“”

数字变量串变量加上空字符串,可以将数字num转化为字符串

等于==

当==两边是字符串和数字的时候会尝试把字符串转化为数字

严格等于===

两边类型不同返回false

两边相同:

需要注意NaN和任何东西比较都不等于,和自己也不等于,NaN≠NaN

JavaScript中的比较是用引用去比较,而不是用值去比较,所以new Object≠new Object,即使他们长度和内容完全相同也是不相等的,因为他们不是完全相等的对象,只有定义一个对象x,让他和x去比较才是true,即使两个空对象也不是true

包装对象

首先我们定义一个字符串变量,然后定义一个变量对象,查看字符串,查看变量

尝试访问字符串的长度,给字符串加一个属性,成功,访问这个属性,找不到

JavaScript中有一个隐藏机制,当把一个基本类型尝试以对象的方式去使用它的时候,比如去访问他的长度属性,或者给他增加一些属性,JavaScript会把这样的基本类型转化为对应的包装类型对象,当完成这个访问后,这个临时对象会被销毁

 类型检测

JavaScript中类型检测的方法有很多,比如

最常见的typeof,会返回字符串,适合函数对象和基本类型

需要注意的是typeof null会返回object,这是由于某些历史原因,因为曾经尝试让他返回null后造成了很多问题

typeof在判断基本类型或者函数对象时非常方便,但是在其他一些情况就会没有办法了,比如我们要判断一个对象是不是数组,用typeof会返回Object,对于判断对象类型我们更常用的是instanceof

instanceof是基于原型链去操作的一个运算符

instanceof期望 左侧是一个对象,如果不是对象,是基本类型会返回false,期望右侧是一个函数对象或者说函数构造器,如果不是会抛出异常

instanceof的大概原理:判断左操作数的对象的原型链上是否有右边构造函数的prototype属性

任何一个构造函数都会有一个prototype对象属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用。

instanceof 方法要求开发者明确地确认对象为某特定类型

实例:

 1 //instanceof 示例
 2 var oStringObject = new String("hello world"); 
 3 console.log(oStringObject instanceof String);   // 输出 "true"
 4 //这段代码问的是“变量 oStringObject 是否为 String 对象的实例?”oStringObject 的确是 String 对象的实例,因此结果是"true"。尽管不像 typeof 方法那样灵活,但是在 typeof 方法返回 "object" 的情况下,instanceof 方法还是很有用的。
 5 
 6 //instanceof 常规用法
 7 // 判断 foo 是否是 Foo 类的实例
 8 function Foo(){} 
 9 var foo = new Foo(); 
10 console.log(foo instanceof Foo)//true
11 
12 //instanceof 在继承中关系中的用法
13 // 判断 foo 是否是 Foo 类的实例 , 并且是否是其父类型的实例
14 function Aoo(){} 
15 function Foo(){} 
16 Foo.prototype = new Aoo();//JavaScript 原型继承
17 var foo = new Foo(); 
18 console.log(foo instanceof Foo)//true 
19 console.log(foo instanceof Aoo)//true
20 
21 //instanceof 复杂用法
22 console.log(Object instanceof Object);//true 
23 console.log(Function instanceof Function);//true 
24 console.log(Number instanceof Number);//false 
25 console.log(String instanceof String);//false 
26  
27 console.log(Function instanceof Object);//true 
28  
29 console.log(Foo instanceof Function);//true 
30 console.log(Foo instanceof Foo);//false

补充:原型法

JavaScript中的方法可以分为三类:

a 类方法

b 对象方法

c 原型方法

调用Object.prototype.toString判断类型

constructor

任何一个对象都有一个constructor属性是继承自原型的,constructor会指向构造这个对象的构造器或者说函数,constructor是可以被改写的所以使用要小心

duck type(鸭子类型)

如果我们不知道这个对象是不是数组,我们判断它的length是不是数字,是否有push()这样的,通过一些特征来判断是不是某些类型

注意:不能用typeof判断某一个变量的值是不是null,可以使用严格等于===

二、表达式和运算符

JavaScript中的表达式

 JavaScript中的运算符

条件运算符:

,运算符

从左到右计算表达式的值并取最右边的

delete运算符

configurable为true才会被delete掉

in运算符

判断x在window中返回true

instanceof,typeof

new运算符

比如我们创建一个空函数Foo()

用new运算符可以创建一个新的对象obj

根据obj.x可以从函数的prototype属性拿到1

可以通过hasOwnPropetry判断是对象上的还是对象的原型的

用._proto_.拿到对象的原型发现x是对象原型上的属性而不是对象本身的属性

this运算符

void运算符

不管操作数是多少后会返回undefined

运算符优先级

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Hibternate框架笔记

    Hibernate框架 配置 配置文件: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibe...

    二十三年蝉
  • Java常见问题

    自古深情留不住,总是套路得人心 最近经历了一次惨无人道的程序员笔试,真的是“笔”试,默默地来整理一下…… 以后遇到问题要多整理…… 常见套路: 当一个变量被赋值...

    二十三年蝉
  • Spring框架(三) JDBCTemplate,声明式事务,自动装载(注解)

     JDBCTemplate 按照标准正常项目的结构 结构图: ? model层 dao层 实现  dao:(DateBase Access Object) 数据...

    二十三年蝉
  • 新版AH326U盘在几个小时的折腾下,又重新复活了

    和宇瞻客服询问半天,得知现在的闪存颗粒,已经单个颗粒可以达到8G容量,所以现在是单贴~ 单贴的直接后果就是,8G的写入速度比旧版双贴的写入速度骤降~

    libo1106
  • R语言_方差分析

    在回归分析中,通过量化的预测变量来预测量化的响应变量,建立了相应的回归模型。 同时,预测变量也不一定是量化的,还可以是名义型或者有序型变量。这种情况下,关注...

    用户1147754
  • 网秦更名凌动智行 域名nq.com惹关注

    知名纽交所上市公司网秦在美国时间2018年1月22日正式对外宣布:公司董事会已经通过了公司的更名计划。根据该计划,“网秦”将更名为“凌动智行”,“N...

    躲在树上的域小名
  • 面向对象,二

               字段        静态字段(没一个对象都有一份),普通字段(每一个对象都不同的数据)

    Wyc
  • RMQ问题(线段树算法,ST算法优化)

    RMQ (Range Minimum/Maximum Query)问题是指: 对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A...

    Angel_Kitty
  • JVM Monitor

    其中 load average 代表的是cpu的平均负载,三个数字分别代表1分钟、5分钟、15分钟内cpu的平均负载。 负荷的大小跟cpu个数以及当前负荷...

    itliusir
  • Derek解读Bytom源码-孤块管理

    Gitee地址:https://gitee.com/BytomBlockchain/bytom

    比原链Bytom

扫码关注云+社区

领取腾讯云代金券