JS数据类型

5次阅读

共计 2448 个字符,预计需要花费 7 分钟才能阅读完成。

JS 常用数据类型
编程语言都具有内建的数据结构,但各种编程语言的数据结构常有不同之处。本文试图列出 JavaScript 语言中内建的数据结构及其属性,它们可以用来构建其他的数据结构;同时尽可能的描述与其他语言的不同之处。
1. 动态类型
JavaScript 是一种弱类型或者说动态语言。这意味着你不用提前声明变量的类型,在程序运行过程中,类型会被自动确定。这也意味着你可以使用同一个变量保存不同类型的数据:
var foo = 42; // foo is a Number now
foo = “bar”; // foo is a String now
foo = true; // foo is a Boolean now

动态类型语言特点是灵活,缺点是牺牲了部分性能。对于动态类型语言,变量类型是可以动态改变的,无法在编译期确定,因此编译期的类型检查比较弱,这将导致很多类型错误直到运行期才能发现。
2. 数据类型
最新的 ECMAScript 标准定义了 7 种数据类型:

6 种原始类型:
Boolean
Null
Undefined
Number
String
Symbol (ECMAScript 6 新定义)

Object

3. 原始值(primitive values)
除 Object 以外的所有类型都是不可变的(值本身无法被改变)。例如,与 C 语言不同,JavaScript 中字符串是不可变的(译注:如,JavaScript 中对字符串的操作一定返回了一个新字符串,原始字符串并没有被改变)。我们称这些类型的值为“原始值”。
布尔类型(Boolean)
布尔表示一个逻辑实体,可以有两个值:true 和 false。
Null 类型
Null 类型只有一个值:null,更多详情可查看 null 和 Null。
Undefined 类型
一个没有被赋值的变量会有个默认值 undefined,更多详情可查看 undefined 和 Undefined。
数字类型
根据 ECMAScript 标准,JavaScript 中只有一种数字类型:基于 IEEE 754 标准的双精度 64 位二进制格式的值(-(263 -1) 到 263 -1)。它并没有为整数给出一种特定的类型。除了能够表示浮点数外,还有一些带符号的值:+Infinity,-Infinity 和 NaN (非数值,Not-a-Number)。
要检查值是否大于或小于 +/-Infinity,你可以使用常量 Number.MAX_VALUE 和 Number.MIN_VALUE。另外在 ECMAScript 6 中,你也可以通过 Number.isSafeInteger() 方法还有 Number.MAX_SAFE_INTEGER 和 Number.MIN_SAFE_INTEGER 来检查值是否在双精度浮点数的取值范围内。超出这个范围,JavaScript 中的数字不再安全了,也就是只有 second mathematical interger 可以在 JavaScript 数字类型中正确表现。
数字类型只有一个整数,它有两种表示方法:0 可表示为 -0 和 +0(”0″ 是 +0 的简写)。在实践中,这也几乎没有影响。例如 +0 === -0 为真。但是,你可能要注意除以 0 的时候:
42 / +0; // Infinity
42 / -0; // -Infinity

字符串类型
JavaScript 的字符串类型用于表示文本数据。它是一组 16 位的无符号整数值的“元素”。在字符串中的每个元素占据了字符串的位置。第一个元素的索引为 0,下一个是索引 1,依此类推。字符串的长度是它的元素的数量。
不同于类 C 语言,JavaScript 字符串是不可更改的。这意味着字符串一旦被创建,就不能被修改。但是,可以基于对原始字符串的操作来创建新的字符串。例如:

获取一个字符串的子串可通过选择个别字母或者使用 String.substr().
两个字符串的连接使用连接操作符 (+) 或者 String.concat().

注意代码中的“字符串类型”!可以使用字符串来表达复杂的数据。以下是一些很好的性质:
容易连接构造复杂的字串符字符串容易被调试 (你看到的往往在字符串里) 字符串通常是许多 APIs 的常见标准 (input fields, local storage values, XMLHttpRequest 当使用 responseText 等的时候回应) 而且他只能与字符串一同使用。按照惯例, 字符串一般可以用来表达任何数据结构。这不是一个好主意。例如,使用一个分隔符,一个可以模仿一个列表(一个 JavaScript 的数组可能更适合一些)。不幸的是,当一个分隔符在用于列表中的元素时,打乱了这个列表。一个转义字符等。所有这些惯例都变成了一个不存在的维护负担而没有正确的工具使用。
表达文本数据和符号数据时候推荐使用字符串。当表达复杂的数据时,使用字符串解析和适当的缩写。
符号类型
符号 (Symbols) 是 ECMAScript 第 6 版新定义的。符号类型是唯一的并且是不可修改的, 并且也可以用来作为 Object 的 key 的值(如下). 在某些语言当中也有类似的原子类型(Atoms). 你也可以认为为它们是 C 里面的枚举类型. 更多细节请看 Symbol 和 Symbol。
对象 Object
在 Javascript 里,对象可以被看作是一组属性的集合。用对象字面量语法来定义一个对象时,会自动初始化一组属性。(也就是说,你定义一个 var a = “Hello”,那么 a 本身就会有 a.substring 这个方法,以及 a.length 这个属性,以及其它;如果你定义了一个对象,var a = {},那么 a 就会自动有 a.hasOwnProperty 及 a.constructor 等属性和方法。)而后,这些属性还可以被增减。属性的值可以是任意类型,包括具有复杂数据结构的对象。属性使用键来标识,它的键值可以是一个字符串或者符号值(Symbol)。
ECMAScript 定义的对象中有两种属性:数据属性和访问器属性。
数据属性数据属性是键值对,并且每个数据属性拥有下列特性:
数据属性的特性(Attributes of a data property)
O(∩_∩)O 哈哈~ 基础还是很重要的。

正文完
 0

JS 数据类型

5次阅读

共计 875 个字符,预计需要花费 3 分钟才能阅读完成。

JS 有 7 种数据类型
number(数字)string(字符串)bollear(布尔)Symbol(符号)object(对象)nullundefined
number
十进制 1.23e2 意为 1.23 乘以 10 的 2 次方二进制 0b 开头的就是二进制八进制 0110 代表八进制 意为 1 乘以 8 加 1 = 90×11 意为 x 表示 16 x1 表示 1x 乘以 1 =16 加 1 = 170×21 = 33 道理同上
string(多行字符串)
var s = ‘123’ + ‘456’ // 推荐这种 var s = ‘123 456′ // 不要写这一种 容易出错
布尔
a && b ab 都为真 a || b ab 只要其中有一个为真 都为真 两个都为假 为假
null、undefined 的区别
如果一个变量没有复制 就是 undefined【规则】有一个非对象 不想复制 初始化为 undefined【惯例】有一个对象 但现在还不想复制 就给 null【惯例】
object 对象
var name = “aaaaa”
var age = 18,

// 对象就是简单类型的组合
var person = {
// 等号两边都加 ”” 功能多 比如 8a:”cccc” 会报错 “8a”:”cccc” 不会报错
“name”:”aaaaa”,
// ES3 不能加,ES5 可以加,IE7 以下 不能加,IE8 以上 可以加,
“age”:18,
married:true,
chilren:{
name:’xxx’,
age:1
}
}
//var person 是变量 {} 类型是 object

// 取值的时候 单引号不能省略 单引号不能省略 单引号不能省略
person[‘name’]

var person = {name:’123′,age:18}

for(var key in person){
console.log(key); // name age (这两个出现的顺序看运气)
console.log(person.key); // 错误写法 相当于字符串 key person.[‘key’]
console.log(person.[key]); // 正确写法
}
typeof 返回对应的类型
除正常外 应特殊记忆 **typeof null 返回 objecttypeof function(){} 返回 function**

正文完
 0

JS 数据类型

5次阅读

共计 710 个字符,预计需要花费 2 分钟才能阅读完成。

值类型(基本类型)
字符串(String)数字(Number)布尔(Boolean)对空(Null)未定义(Undefined)Symbol:ES6 引入的一种新的原始数据类型,表示独一无二的值。
引用类型
对象(Object)数组(Array)函数(Function)
值类型和引用类型区别
声明变量时不同的内存分配:

原始值:存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。
引用值:存储在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存地址。

不同的内存分配机制也带来了不同的访问机制

在 javascript 中是不允许直接访问保存在堆内存中的对象的,所以在访问一个对象时,首先得到的是这个对象在堆内存中的地址,然后再按照这个地址去获得这个对象中的值,这就是传说中的按引用访问。
而原始类型的值则是可以直接访问到的。

复制变量时的不同

原始值:在将一个保存着原始值的变量复制给另一个变量时,会将原始值的副本赋值给新变量,此后这两个变量是完全独立的,他们只是拥有相同的 value 而已。
引用值:在将一个保存着对象内存地址的变量复制给另一个变量时,会把这个内存地址赋值给新变量,也就是说这两个变量都指向了堆内存中的同一个对象,他们中任何一个作出的改变都会反映在另一个身上。多了一个指针。

参数传递的不同(把实参复制给形参的过程)

原始值:只是把变量里的值传递给参数,之后参数和这个变量互不影响。
引用值:对象变量它里面的值是这个对象在堆内存中的内存地址,因此它传递的值也就是这个内存地址,这也就是为什么函数内部对这个参数的修改会体现在外部的原因了,因为它们都指向同一个对象。

正文完
 0