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 方法要求开发者明确地确认对象为某特定类型
实例:
//instanceof 示例
var oStringObject = new String("hello world");
console.log(oStringObject instanceof String); // 输出 "true"
//这段代码问的是“变量 oStringObject 是否为 String 对象的实例?”oStringObject 的确是 String 对象的实例,因此结果是"true"。尽管不像 typeof 方法那样灵活,但是在 typeof 方法返回 "object" 的情况下,instanceof 方法还是很有用的。 //instanceof 常规用法
// 判断 foo 是否是 Foo 类的实例
function Foo(){}
var foo = new Foo();
console.log(foo instanceof Foo)//true //instanceof 在继承中关系中的用法
// 判断 foo 是否是 Foo 类的实例 , 并且是否是其父类型的实例
function Aoo(){}
function Foo(){}
Foo.prototype = new Aoo();//JavaScript 原型继承
var foo = new Foo();
console.log(foo instanceof Foo)//true
console.log(foo instanceof Aoo)//true //instanceof 复杂用法
console.log(Object instanceof Object);//true
console.log(Function instanceof Function);//true
console.log(Number instanceof Number);//false
console.log(String instanceof String);//false console.log(Function instanceof Object);//true console.log(Foo instanceof Function);//true
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

运算符优先级

JavaScript深入浅出补充——(一)数据类型,表达式和运算符的更多相关文章
- javascript 核心语言笔记 4 - 表达式和运算符
表达式(expression)是 JavaScript 中的一个短语(phrases),JavaScript 解释器会将其计算(evaluate)出一个结果.程序中的常量.变量名.数组访问等都是表达式 ...
- Javascript基础学习(2)_表达式和运算符
1.==和===的区别(!=和!==是相反的比较) 它们采用了同一性的两个不同定义.==是相等性,===是等同性. ①“===”进行两个值的比较 两个值的类型不同,就不相等 两个值是数字,并且值相同, ...
- Javascript权威指南——第二章词法结构,第三章类型、值和变量,第四章表达式和运算符,第五章语句
第二章 词法结构 一.HTML并不区分大小写(尽管XHTML区分大小写),而javascript区分大小写:在HTML中,这些标签和属性名可以使用大写也可以使用小写,而在javascript中必须小写 ...
- 笔记《JavaScript 权威指南》(第6版) 分条知识点概要3—表达式和运算符
[表达式和运算符]原始表达式,初始化表达式(对象和数组的),函数定义表达式,属性访问表达式,调用表达式,对象创建表达式,运算符概述,算术表达式,关系表达式,逻辑表达式,赋值表达式,表达式计算,其他运算 ...
- Javascript学习2 - Javascript中的表达式和运算符
原文:Javascript学习2 - Javascript中的表达式和运算符 Javascript中的运算符与C/C++中的运算符相似,但有几处不同的地方,相对于C/C++,也增加了几个不同的运算符, ...
- C#图解教程 第八章 表达式和运算符
表达式和运算符 表达式字面量 整数字面量实数字面量字符字面量字符串字面量 求值顺序 优先级结合性 简单算术运算符求余运算符关系比较运算符和相等比较运算符递增运算符和递减运算符条件逻辑运算符逻辑运算符移 ...
- Python基础0:变量 赋值 表达式和运算符
变量: 前面我们在使用print()输出内容的时候,如果内容很长,后面要再次输出的时候,就需重新在输入一遍. 如果给输出的内容起个简单的别名.这样我们用简短的别名来代替长内容,下次要输出的时候就直接使 ...
- Python3基础-表达式和运算符
表达式和运算符 什么是表达式? 1+2*3就是一个表达式,这里的加号和乘号叫做运算符,1.2.3叫做操作数. 1+2*3经过计算后得到的结果是7,我们可以将计算结果存放在一个变量里,result=1+ ...
- 第四章:Javascript表达式和运算符
表达式是javascript中的一个短语,javascript解释器会将其计算出一个结果.程序中常用量是最简单的一类表达式就是变量.变量名也是一种简单的表达式,它的值就是赋值给变量的值.复杂的表达式是 ...
随机推荐
- Spring+SpringMVC+MyBatis深入学习及搭建(一)——MyBatis的基础知识
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6812311.html 1.对原生态jdbc程序中问题总结 1.1 jdbc程序 需求:使用jdbc查询mys ...
- 【安装Python环境】之“安装 setuptools ”时出现的问题以及解决办法
安装Python环境时,还需要安装"setuptools 与 pip",但是安装setuptools时出现了几个问题,如下: setuptools 与 pip 下载地址如下:htt ...
- 【JAVAWEB学习笔记】18_el&jstl&javaee的开发模式
一.EL技术 1.EL 表达式概述 EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL 出现的目的是要替代jsp页面中脚本的编写. 2.EL从域中取出数据 ...
- SparkMLlib分类算法之支持向量机
SparkMLlib分类算法之支持向量机 (一),概念 支持向量机(support vector machine)是一种分类算法,通过寻求结构化风险最小来提高学习机泛化能力,实现经验风险和置信范围的最 ...
- deepin/ubuntu下搭建Jekyll环境
title: deepin/ubuntu下搭建Jekyll环境 最近用github搭建了个博客,正好也学习一下markdown语法,由于markdown写完后不是立即可见,所以每次写完文章都要经过在线 ...
- 港交所OMD-C对接笔记
工作中需要对接港交所OMD-C的Standard版行情,现在把一些知识点做个笔记,供以后查阅. 「香港交易所领航星」巿场数据平台-证券市场(HKEX Orion Market Data Platfor ...
- 分布式Java应用与实践 (一)
一) 分布式Java应用 1.1 基于消息方式实现系统间的通信 数据传输 TCP/IP 可靠的网络传输协议,首先给通信双方建立链接之后再进行数据传输,保证链接及数据传输的可靠,因此会牺牲一些性能 UD ...
- cuda学习1-初始庐山真面目
cuda作为gpu计算中的代表,拥有着超级高的计算效率,其原因是gpu实际相当与一台超级并行机组,使用过MPI做并行计算的人们可能知道,所谓的并行计算,简单讲就是用多个U(计算单元)来完成一个U的计算 ...
- 干货——基于Nop的精简版开发框架(附源码)
.NET的开发人员应该都知道这个大名鼎鼎的高质量b2c开源项目-nopCommerce,基于EntityFramework和MVC开发,拥有透明且结构良好的解决方案,同时结合了开源和商业软件的最佳特性 ...
- 一个IT人员实用的工具:Tmux
1.Tmux安装 tmux下载地址: http://sourceforge.net/projects/tmux/files/tmux/tmux-1.6/tmux-1.6.tar.gz/download ...