Js共有六种数据类型(ES6又增加了第七种Symbol类型的值):

原始类型:数值,字符串,布尔值

合成类型:对象(object):各种值组成的集合

其他undefined,null

对象又可以分成三个子类型:狭义的对象(object),数组(array),函数(function)

typeof运算符:返回一个值的数据类型

可以用来检查一个没有声明的变量,而不报错  返回undefined

typeof { }和typeof [ ]都是object

表示在Js内部,数组本质上只是一种特殊的对象

instanceof可以区分数组和对象

null返回object

null和undefined

语法效果几乎没区别,都表示没有,在if语句中自动转为false,相等运算符直接判断两者相等

区别:null是一个表示“空”的对象,转为数值为0;

undefined是一个表示“此处无定义”的原始值,转为数值时为NaN

空字符串在转换为布尔值时为false

数值:

Js内部所有数字都是以64位浮点数形式储存,即使是整数,所以1===1.0

Js64位二进制位:

1:符号位,0表示正数,1表示负数

2~12:指数部分   共11位

13~64:小数部分  共52位

因此,绝对值小于2的53次方的整数都可以精确表示

数值范围:

2^1024到·2^-1023

否则溢出

Js提供Number对象的MAX_VALUE和MIN_VALUE属性,返回可以表示的具体的最大值和最小值

数值的表示法:

可以用字面形式直接表示,比如35(十进制)和0xFF(十六进制)

也可以采用科学计数法表示:

字母e或E的后面,跟着一个整数,表示这个数值的指数部分

当小数点前的数字多于21位或小数点后的零多于5个

自动转为科学计数法

一般有前导0会视为8进制,但如果后面有数字8和9会被视为10进制

特殊数值:

正零和负零

唯一区别在于+0和-0在作为分母时返回值不同  对应±Infinity

NaN:

表示非数字(Not a Number)  数据类型为Number

主要出现在将字符串解析为数字出错的场合,0除以0也会得到NaN

运算规则:

NaN不等于任何值,包括它本身

数组的indexOf方法内部使用的是严格相等运算符,所以该方法对NaN不成立

在布尔运算时当做false

与任何数包括自己运算,得到的都是NaN

Infinity:

表示无尽,有正负

表示两种场景,正的数值太大,负的数值太小,非0值除以0

当与NaN比较时,总是返回false

与数值相关的全局方法:

parselnt():将字符串解析为整数

parseFloat():解析为浮点数

isNaN()

isFinite()

字符串:

字符串与数组:

字符串可以视为字符数组,因此可以使用数组的方括号运算符,用来返回某个位置的字符,下标从0开始

但是无法通过这种方式改变字符串之中的单个字符

length属性:

length属性返回字符串的长度,该属性无法改变

var s=‘hello‘
s.length

对象:

对象是JavaScript语言的核心概念,也是最重要的数据类型

对象,简单说,是一组“键值对”的结合,是一种无序的复合数据集合

对象的所有键名都是字符串,即使是数值,也会被转换为字符串,因此不必必需加引号

但当字符串格式不符合标识符条件,如第一个字符为数字,或者含有空格或运算符,且也不是数字时,必需加上引号

如:

var obj={
'1p':'hello world'
'h w':'hello world'
'p+q':'hello world'

对象的每一个键名又称为“属性”(property),它的“键值”可以是任何数据类型,如果一个属性的值为函数,通常把这个属性称为“方法”,它可以像函数那样调用

如果属性的值还是一个对象,就形成了链式引用

var o1={}
var o2={
bar:"hello"
p:function(x){
return 2*x;
}
}
o1.foo=o2;
o1.foo.bar;
o1.foo.p(1);

对象的属性之间用逗号分隔,最后一个属性后可以加逗号,也可以不加

属性可以动态创建,不必在对象声明时就指定  如上  o1.foo

对象的引用:

如果不同的变量名指向同一个对象,那么他们都是这个对象的引用,即指向同一个内存地址。

修改一个变量,会影响其他所有变量。

此时如果取消一个变量对于原对象的引用,不会影响到另一个变量

但是这种引用只限于对象,如果两个变量指向同一原始类型的值,那么,变量这时都是值的拷贝

对象采用大括号表示,如果行首是一个大括号,会与语句产生歧义

因此最好加上圆括号:

({foo:123})

属性的操作:

读取:

1.使用点运算符

2.使用方括号运算符

使用方括号运算符时,键名必须放在引号里面,否则会被当做变量处理

不过数字键可以不加引号,会自动转换为字符串

不过数值键名不能使用点运算符,会被当做小数点,只能使用方括号运算符

方括号运算符内部还可以使用表达式

赋值:

使用两个运算符对属性赋值,允许属性后绑定,可以在任意时刻定义新属性

查看:

查看一个对象本身的所有属性,可以使用Object.keys方法

var obj = {
key1: 1,
key2: 2
};
Object.keys(obj);
// ['key1', 'key2']

属性的删除:delete命令

delete命令用于删除对象的属性,成功后返回true

但不能根据返回值判断此属性是否存在

判断属性是否存在:in

检查键名是否存在

左边是一个字符串,表示属性名,右边是一个对象

但它不能判别哪些属性是对象自身的,哪些是继承的

此时要通过对象的hasOwnProperty方法判断

var obj = {};
if ('toString' in obj) {
console.log(obj.hasOwnProperty('toString')) // false
}

属性的遍历:for…in循环

遍历所有可遍历属性,包括继承得来的

只想要遍历当前对象属性,可以结合hasOwnProperty

var person = { name: '老张' };
for (var key in person) {
if (person.hasOwnProperty(key)) {
console.log(key);
}
}

with语句

with (对象) {
语句;
}

作用是操作同一对象的多个属性时,提供一些书写的方便

由于作用域问题 ,with绑定对象不明确,因此尽量少用,或用临时变量代替

  

Js学习(2)数据类型的更多相关文章

  1. js学习之数据类型

    js学习之数据类型 基础类型:number string boolean null undefined 引用类型:object array function undefined值是派生自null值的( ...

  2. JS学习笔记-数据类型

    最初的JS学习已经过去大半年的时间了,至此感觉对JS的使用与理解并非非常深入,因此在近期的工作之余也開始了新一轮的JS学习. 几天时间过去了,对于一些基础内容的学习还是非常有必要的,就从今天的又一次整 ...

  3. D3.js学习记录 - 数据类型【转】【新】

    1.变量 JAVASCRIPT的变量是一种类型宽松的语言.定义变量不用指定数据类型.而且还是动态可变的. var value = 100;value = 99.9999;value = false;v ...

  4. Javascript高级编程学习笔记(3)—— JS中的数据类型(1)

    前一段时间由于事情比较多,所以笔记耽搁了一段时间,从这一篇开始我会尽快写完这个系列. 文章中有什么不足之处,还望各位大佬指出. JS中的数据类型 上一篇中我写了有关JS引入的Script标签相关的东西 ...

  5. JS学习笔记(一)基本数据类型和对象类型

    js是一种弱类型的语言,所有的变量都用var进行声明,字符串用双引号或单引号括起来,常见基本数据类型为number,string,boolean等.如 var num = 123;或var num = ...

  6. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  7. JS 学习笔记--9---变量-作用域-内存相关

    JS 中变量和其它语言中变量最大的区别就是,JS 是松散型语言,决定了它只是在某一个特定时间保存某一特定的值的一个名字而已.由于在定义变量的时候不需要显示规定必须保存某种类型的值,故变量的值以及保存的 ...

  8. JS~JS里的数据类型

    JS里的数据类型,它虽然是个弱类型的语言,但它也有自己的规定的,它不会向其它语言那么,使用int来声明一个整形变量,而是使用 var,如果你是一个C#的开发者,你就会知道,原来C#现在也在和JS学,开 ...

  9. js基础--javaScript数据类型你都弄明白了吗?绝对干货

    欢迎访问我的个人博客:http://www.xiaolongwu.cn 数据类型的分类 JavaScript的数据类型分为两大类,基本数据类型和复杂数据类型. 基本数据类型:Null.Undefine ...

随机推荐

  1. sourcetree 添加私钥

    参考网址: https://www.jianshu.com/p/2a4a39e3704f

  2. RabbitMQ.Net 应用(1)

    风浪子 概述 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Pu ...

  3. 29.Spring-基础.md

    目录 1.目的和作用 [toc] 2.概念 2.1框架的设计 2.2控制反转 2.3AOP [toc] 3. 3.1Spring六大模块 [toc] 1.目的和作用 解决对象的创建和以及对象依赖关系的 ...

  4. 12.常用类简单介绍.md

    目录 1.Scanner类 2.System类 4.Object类和工具类 5.StringBuffer类和StringBuilder类 6.Math类 7.Random类和ThreadLocalRa ...

  5. Hibernate 再接触 Hello world 模拟Hibernate

    没有Hibernate以前 Cilent 客户端 new出一个对象 然后执行JDBC 然后这样的访问数据库并不是面向对象语言 使用Hibernate以后 Cilent new 出一个对象后 访问配置文 ...

  6. Unity3D之Lightmap详解

    作者:李志健 Unity 完全集成了光照贴图,可以通过编辑器创建完整的光照贴图,你完全不用担心,所有材质会自动获得光照贴图.光照贴图的意思是,所有灯光的特性将被直接映射到Beast lightmapp ...

  7. Swift 2.0学习笔记(Day 16)——字典集合

    Swift字典表示一种非常复杂的集合,允许按照某个键来访问元素.字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合.键集合是不能有重复元素的,而值集合是可以重复的,键和值是成 ...

  8. 学JS的心路历程 -函式(三)this

    this是什么,取决于被呼叫的呼叫地点. 昨天有提到说,呼叫函式时候会传递隐含参数:arguments和this并讲解了arguments,今天我们就来探讨this吧! 什么是this 我们都会呼叫函 ...

  9. nyoj17-单调递增最长子序列-(dp)

    17-单调递增最长子序列 内存限制:64MB 时间限制:3000ms 特判: No通过数:125 提交数:259 难度:4 题目描述: 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列 ...

  10. apicloud监听返回键(安卓试过)

    下面监听写在apiready里面 api.addEventListener({ //使用下方函数此处好像失效了 name: 'keyback' }, function(ret, err) { aler ...