Javascript的数据类型

  • Number
  • String
  • Boolean
  • Undefined
  • Null
  • Object

如下图,其中NumberStringBooleanUndefinedNull是原始类型,Object是对象类型,Object中可以包含ArrayFunction等类型。

常规运算符

下面来看几行代码

 var num=32
var str=”32”
num+str=”3232” //利用这一点可以把数字转换为字符串
var num=123
num=num+””//”32”
num=”12”
num=num-0//转换成数字 12

当常规运算符左右两侧是NumberString的时候,如果是加号,会把Number转成String处理,如果是减号,则String会被转成Number处理,乘法和除法类似于减法。

等于和严格等于

var c=(0==false) /true
var c=(0===false)// false 严格等于 除了类型相等,值也要相等
(null==undefined)//true
(null===undefined)//false new Object() == new Object()// false Object是引用类型
[1,2]==[1,2] //false 因为[1,2] 是Array 属于Object 所以是False null==null //true
null===null //true undefined==undefined//true
undefined===undefined//true NaN==NaN //false
NaN===NaN //false NaN和谁都不想等,即使是自己 12=="12"//true 等号两边一个是数字一个是字符串,编译器会尝试把字符串转成数字 true==1//true 等号两边一个是布尔值一个是其他类型,编译器会尝试把布尔转成数字再比较
true=="1" //true
var a=new Object("123")
a==123 //true
a=”123”//true
如果等号两边一边是Object另一边是Number或者String,Object会转换成基本类型再比较

类型包装

原始类型中,StringNumberBoolean都有包装类型

var str="string"
var s=new String("string") //String的包装类,包含了许多的方法和属性
str.t=10//str是基本类型,但是当我们把str附加一个属性并赋值的时候,Javascript会智能地把str转换为对应的临时的包装类型,当再次访问str的t属性的时候,发现值是undefined,因为生成的临时包装对象被销毁了,所以t的值变成了undefined。

类型检测

主要有5种类型检测方式

  • Typeof
  • instanceof
  • Object.prototye.toString
  • Constructor
  • duck type
typeof 100 //"number"
typeof true//"boolean"
typeof function(){}//"function"
typeof(undefined)//"undefined"
typeof new Object()//"object"
typeof [1,2]//"object"
typeof NaN//"number"
typeof null//"object"?本来是规定返回“null” 但是这导致了大量的网站瘫痪,所以规定返回“Object”
typeof Null//"undefined"

null大小写不一致时返回的类型也不一样

typeof适用于原始类型以及function的检测,遇到null失效

instanceof 是基于原型链的,适用于Object自定义对象,也可以用来检测原生对象,在不同的iframe和window间检测时失效,右侧对象必须是函数对象或函数构造器,否则就会抛出异常

Object.Prototype.toString.appy([])通过{}.toString拿到,适合内置对象和原生类型,遇到nullundefined失效

instanceof 123 //会抛出如下异常
Uncaught SyntaxError: Unexpected token instanceof

[1,2] instanceof Array //true   !!!原理是判断左侧对象的原型链上是否有右侧构造函数的prototype属性。

ject.Prototype.toString.appy([]);===”[object Array]”
Object.Prototype.toString.appy(function(){});===”[object Function]”
Object.Prototype.toString.appy(nll);=== ”[object Null]” //IE 678 返回的是[objet object]兼容性问题
Object.Prototype.toString.appy(undefined);=== ”[object Undefined]”

作者:悠扬的牧笛

博客地址:http://www.cnblogs.com/xhb-bky-blog/p/5854646.html

声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。

【总结】Javascript基础的更多相关文章

  1. JavaScript基础

    JavaScript基础 JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处 ...

  2. 一步步学习javascript基础篇(0):开篇索引

    索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...

  3. 前端之JavaScript基础

    前端之JavaScript基础 本节内容 JS概述 JS基础语法 JS循环控制 ECMA对象 BOM对象 DOM对象 1. JS概述 1.1. javascript历史 1992年Nombas开发出C ...

  4. 一步步学习javascript基础篇(3):Object、Function等引用类型

    我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂 ...

  5. Javascript基础回顾 之(三) 面向对象

    本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...

  6. Javascript基础回顾 之(二) 作用域

    本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...

  7. Javascript基础回顾 之(一) 类型

    本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...

  8. JavaScript 基础回顾——对象

    JavaScript是基于对象的解释性语言,全部数据都是对象.在 JavaScript 中并没有 class 的概念,但是可以通过对象和类的模拟来实现面向对象编程. 1.对象 在JavaScript中 ...

  9. javascript基础01

    javascript基础01 Javascript能做些什么? 给予页面灵魂,让页面可以动起来,包括动态的数据,动态的标签,动态的样式等等. 如实现到轮播图.拖拽.放大镜等,而动态的数据就好比不像没有 ...

  10. javascript基础02

    javascript基础02 1.数据类型 数据类型的描述在上篇的扩展中有写到链接 由于ECMAScript数据类型具有动态性,因此的确没有再定义其他数据类型的必要.这句话很重要. 如果以后再数据类型 ...

随机推荐

  1. 你必须收藏的Github技巧

    一秒钟把Github项目变成前端网站 GitHub Pages大家可能都知道,常用的做法,是建立一个gh-pages的分支,通过setting里的设置的GitHub Pages模块可以自动创建该项目的 ...

  2. [Linux 性能检测工具]PIDSTAT

    PIDSTAT NAME pidstat对linux任务的统计 语法 pidstat [ -C comm ] [ -d ] [ -h ] [ -I ] [ -l ] [ -p { pid [,...] ...

  3. Yii2 modal中 ajax提交表单

    view: // view 代码 $form = ActiveForm::begin(['id' => $model->formName()]); // js 代码 $js = <& ...

  4. Mysql常用函数,难点,注意

    一.数学函数 ABS(x)   返回x的绝对值 BIN(x)   返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x)   返回大于x的最小整数值 EXP(x)   返回值e( ...

  5. 《Note --- Unreal 4 --- PersonaHowToMovement》

    https://docs.unrealengine.com/latest/CHN/Gameplay/HowTo/CharacterMovement/index.html 这里的demo是按照一些per ...

  6. JAVA中整型的存储和左右移位运算

    byte,1个字节8位, -128 ~ 127之间,首位表示正负,0为正,1为负,0111,1111表示127,-127为127取反1000,0000,再加1,即1000,0001为-127,-127 ...

  7. 好用的dos命令

    控制台使用"help"查看帮助,使用"help + command-name"或"command-name /?"查看命令帮助. dir 可 ...

  8. SQL操作符

    Oracle中的操作符算术操作符:无论是在sqlserver,或者是java中,每种语言它都有算术操作符,大同小异. Oracle中算术操作符(+)(-)(*)(/) 值得注意的是:/ 在oracle ...

  9. [开源].NET数据库访问框架Chloe.ORM

    扯淡 13年毕业之际,进入第一家公司实习,接触了 EntityFramework,当时就觉得这东西太牛了,访问数据库都可以做得这么轻松.优雅!毕竟那时还年轻,没见过世面.工作之前为了拿个实习机会混个工 ...

  10. [LeetCode] Convex Polygon 凸多边形

    Given a list of points that form a polygon when joined sequentially, find if this polygon is convex ...