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
运算符优先级
- beagle MONO 应用的desktop search
- Python3与OpenCV3.3 图像处理(一)-环境搭建与简单DEMO
- winform中利用正则表达式得到有效的电话/手机号
- 浅述RDF,畅想一下FOAF应用
- 数据源控件参数类Parameter
- 我们来继续研究 mybatis 框架sql映射文件的属性
- 开源.NET邮件服务器
- 次次获得《头脑王者》满分的秘诀
- 如何在ASP.NET 2.0中定制Expression Builders
- codeproject 几篇asp.net文章
- .NET Web 自动化测试工具
- Javascript数组常用方法[包含MS AJAX.NET的prototype扩展方法]示例
- 10步骤优化SQL Server 数据库性能
- 漫谈语音合成之Char2Wav模型
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Express新建项目与配置项目热加载
- selenium控制已打开的页面
- 盘点一下lua脚本和python的区别(基础)
- python识别视频黑屏或者低清晰度
- python在linux环境下安装skimage
- python3异步爬虫 ——aiohttp模板使用
- [PHP] 抽象工厂设计模式-创建型设计模式
- [javascript] 支付宝小程序网络GET请求
- [PHP] 生成器模式-创建型设计模式
- [PHP] 工厂方法设计模式-创建型设计模式
- [PHP] 对象池模式-创建型设计模式
- [PHP] 原型模式-创建型设计模式
- [PHP] 简单工厂模式-创建型设计模式
- [PHP] 单例模式-创建型设计模式
- [PHP] 静态工厂模式-创建型设计模式