保藏本站 保藏本站
188bet注册网主页 - 软件测验 - 常用手册 - 站长东西 - 技能社区
主页 > JavaScript > JS根底入门 > 正文

主页 - PHP - 数据库 - 操作体系 - 游戏开发 - JS - Android - MySql - Redis - MongoDB - Win8 - Shell编程 - DOS指令 - jQuery - CSS款式 - Python - Perl

Access - Oracle - DB2 - SQLServer - MsSql2008 - MsSql2005 - Sqlite - PostgreSQL - node.js - extjs - JavaScript vbs - Powershell - Ruby

Javascript中的数据类型之旅

尽管Javascript是弱类型言语,可是,它也有自己的几种数据类型,分别是:Number、String、Boolean、Object、Udefined、Null。其间,Object归于杂乱数据类型,Object 由无序的键值对组成。其他几种都归于简略数据类型。留意:变量类型首字母大写,而变量值首字母是小写的。

JavaScript不支持自界说类型,所以JavaScript中的一切值都归于这六种类型之一。
依据ECMAScript 5.1的标准,javascript中共有六种数据类型,分别为:Undefined, Null, Boolean,Number, String、Object。前五种归于根本类型,最终一种归于Object类型。

最新的ECMAScript 6 又加了一种类型:Symbol (ECMAScript 6 新界说)

根本数据类型

Undefined:只需一个值,为undefined,意味着“空值(no value)”,适用于一切数据类型。
Null:只需一个值,为null,意味着“空目标(no object)”,只适用于目标类型。(literal)
Boolean:有两个值,为true与false
Number:的值是遵从IEEE 754标准的64位浮点数的调集,没有整型数据结构。此外还包含三个特别的值:NaN、Infinity、-Infinity
String:值是有穷个Unicode字符的调集。必须用'或"括起来。

一、String

JavaScript的字符串类型用于表明文本数据。它是一组16位的无符号整数值的“元素”。在字符串中的每个元素占有了字符串的方位。第一个元素的索引为0,下一个是索引1,依此类推。字符串的长度是它的元素的数量

与 C 言语不同,JavaScript 中字符串是不行变的(译注:如,JavaScript 中对字符串的操作必定回来了一个新字符串,原始字符串并没有被改动)

Javascript中一切都是object-based

创立string,也有两种类型

1、运用字面量办法创立的字符串,为根本类型的string //string

2、运用String()创立的字符串,为根本类型的string // string

3、运用结构函数 new String()的办法创立的字符串,为目标类型的 //string

var str1 = "javascript"; //string
var str2 = String("javascript"); //string 不引荐
var str3 = new String('javascript'); //object

object 和 string也是有差异的

s1 = "2 + 2"; // creates a string primitive
s2 = new String("2 + 2"); // creates a String object
console.log(eval(s1)); // returns the number 4
console.log(eval(s2)); // returns the string "2 + 2"
字符串目标的转化 valueof -》 string

console.log(eval(s2.valueOf())); // returns the number 4

二、boolean

不要将原始值true false,和值为true false的Boolean目标相混杂

1、假如Boolean结构函数的参数不是一个布尔值,则该参数会被转化成一个布尔值

2、假如参数是 0, -0, null,false, NaN, undefined, 或许空字符串 (""),生成的Boolean目标的值为false. 其他任何值,包含任何目标或许字符串"false", 都会创立一个值为true的Boolean目标

var x = new Boolean(false);
if(x){
 console.log(x.valueOf(),typeof x); // false object
}

上面会履行,很奇特的代码

不要经过新建Boolean目标的办法来将一个非布尔值转化成布尔值. 直接运用Boolean函数才是正确的

var x = Boolean(expression);  // 这样用
var x = new Boolean(expression); // 而不要这样!
初始化的时分

//false
var bNoParam = new Boolean();
var bZero = new Boolean(0);
var bNull = new Boolean(null);
var bEmptyString = new Boolean("");
var bfalse = new Boolean(false);
//true
var btrue = new Boolean(true);
var btrueString = new Boolean("true");
var bfalseString = new Boolean("false");
var bSuLin = new Boolean("Su Lin");

三、Number

依据 ECMAScript 标准,JavaScript 中只需一种数字类型:根据 IEEE 754 标准的双精度 64 位二进制格局的值(-(253 -1) 到 253 -1)。它并没有为整数给出一种特定的类型。除了能够表明浮点数外,还有一些带符号的值:+Infinity,-Infinity 和 NaN (非数值,Not-a-Number)

数字类型只需一个整数,它有两种表明办法: 0 可表明为 -0 和 +0("0" 是 +0 的简写)。 在实践中,这也几乎没有影响。 例如 +0 === -0 为真。 可是,你或许要留意除以0的时分:

42 / +0; // Infinity
42 / -0; // -Infinity

假如参数无法被转化为数字,则回来 NaN。

在非结构器上下文中 (如:没有 new 操作符),Number 能被用来履行类型转化

isNAN 类型判别

Number.isNaN(NaN);  // true
Number.isNaN(Number.NaN); // true
Number.isNaN(0 / 0)  // true
// e.g. these would have been true with global isNaN()
Number.isNaN("NaN");  // false
Number.isNaN(undefined); // false
Number.isNaN({});   // false
Number.isNaN("blabla"); // false
// These all return false
Number.isNaN(true);
Number.isNaN(null);
Number.isNaN(37);
Number.isNaN("37");
Number.isNaN("37.37");
Number.isNaN("");
Number.isNaN(" ");

原型链承继的联系

console.log(Number.prototype.__proto__ == Object.prototype); //true
console.log(Number.prototype.__proto__.__proto__ == Object.prototype.__proto__);//true
console.log(Object.prototype.__proto__ === null);//true
console.log(typeof Number);//function

运用 Number 转化 Date 目标

var d = new Date("December 17, 1995 03:24:00");
console.log(Number(d));

四、Null

null 是一个 JavaScript 字面量,表明空值(null or an "empty" value),即没有目标被呈现(no object value is present)。它是 JavaScript 原始值 之一。

null 是一个字面量 (而不是大局目标的一个特点,undefined 是 )

console.log(null); //null
console.log(undefined);//undefined
console.log(window.null);//undefined
console.log(window.undefined);//undefined

null与undefined的差异

console.log(foot);//Uncaught ReferenceError: foot is not defined
var foo;
console.log(foo);//undefined
var bar =null;
console.log(bar);//null
typeof null  // object (bug in ECMAScript, should be null)
typeof undefined // undefined
null === undefined // false
null == undefined // true

所以判别null,能够判别类型 + 值

五、Undefined

在JavaScript中,undefined这个词有多重意义.首字母大写的Undefined表明的是一种数据类型,小写的undefined表明的是归于这种数据类型的仅有的一个值.但这两种undefined都只能存在于文档或标准中,不能存在于JavaScript代码中.在JavaScript代码中,你看到的undefined最有或许是大局目标的一个特点,该特点的初始值是便是前面所说的原始值undefined,还有种状况便是,这个undefined是个局部变量,就像其他一般变量相同,没有任何特别性,它的值不用定是undefined,但一般状况下都是的.下面咱们所说的undefined,都指的是window.undefined这个特点.

在ES3中(Firefox4之前),window.undefined便是一个一般的特点,你完全能够把它的值改动成为恣意的真值,但在ES5中((Firefox4之后),window.undefined成了一个不行写,不行装备的数据特点,它的值永远是undefined.

一个未初始化的变量的值为undefined,一个没有传入实参的形参变量的值为undefined,假如一个函数什么都不回来,则该函数默许回来undefined.

你能够运用严厉持平运算符来判别一个值是否是undefined:

var foo;
console.log(foo === undefined);//true
console.log(typeof foo === 'undefined');//true
console.log(window.foo === undefined);//true
console.log(bar === undefined);//Uncaught ReferenceError: bar is not defined
console.log(typeof bar === 'undefined');//true
console.log(window.bar === undefined);//true
console.log(typeof undefined == 'undefined'); //true
console.log(typeof null == 'object');//true
console.log(null == undefined);//true
console.log(null === undefined);//false

总结

Null的值是null,表明一个空目标指针,没有指向任何目标
Undefined的值是undefined,表明声明变量或目标的特点却未初始化
undefined值是派生自null的,所以对他们履行持平测验会回来true
数值、布尔值、目标和字符串值都有toString()办法。但null和undefined值没有这个办法
大都状况下,调用toString()办法不用传递参数。可是,在调用数值的toString()办法时,能够传递一个参数:输出数值的基数

var num = 10;
alert(num.toString()); //"10"
alert(num.toString(2)); //"1010"
alert(num.toString(8)); //"12"
alert(num.toString(10)); //"10"
alert(num.toString(16)); //"a"

在不知道要转化的值是不是null或undefined的状况下,还能够运用转型函数String(),这个函数能够将任何类型的值转化为字符串。String()函数遵从下列转化规则:

  ● 假如值有toString()办法,则调用该办法(没有参数)并回来相应的成果

  ● 假如值是null,则回来"null"

  ● 假如值是undefined,则回来"undefined"

六、Object

Javascript中一切皆Object

// Objects
typeof {a:1} === 'object';
// 运用Array.isArray或许Object.prototype.toString.call办法能够从根本的目标中区分出数组类型
typeof [1, 2, 4] === 'object';
typeof new Date() === 'object';
// 下面的简单令人利诱,不要这样运用!
typeof new Boolean(true) === 'object';
typeof new Number(1) ==== 'object';
typeof new String("abc") === 'object';
// 函数
typeof function(){} === 'function';
typeof Math.sin === 'function';

实例化一个空Object

var o = new Object();
var o = new Object(undefined);
var o = new Object(null);
var o = {};

原型

界说特点为__proto__: 值 或 "__proto__": 值 时,不会创立名为__proto__特点。假如给出的值是目标或许null,那么目标的[[Prototype]]会被设置为给出的值。(假如给出的值不是目标也不是null,那么目标的原型不会改动。)

var obj1 = {};
assert(Object.getPrototypeOf(obj1) === Object.prototype);
var obj2 = { __proto__: null };
assert(Object.getPrototypeOf(obj2) === null);
var protoObj = {};
var obj3 = { "__proto__": protoObj };
assert(Object.getPrototypeOf(obj3) === protoObj);
 var obj4 = { __proto__: "not an object or null" };
assert(Object.getPrototypeOf(obj4) === Object.prototype);
assert(!obj4.hasOwnProperty("__proto__"));

在目标字面值中,仅有一次改动原型的时机;屡次改动原型,会被视为语法过错。

不运用冒号记法的特点界说,不会改动目标的原型;而是和其他具有不同姓名的特点相同是一般特点界说。

var __proto__ = "variable";
var obj1 = { __proto__ };
assert(Object.getPrototypeOf(obj1) === Object.prototype);
assert(obj1.hasOwnProperty("__proto__"));
assert(obj1.__proto__ === "variable");
var obj2 = { __proto__() { return "hello"; } };
assert(obj2.__proto__() === "hello");
var obj3 = { ["__prot" + "o__"]: 17 };
assert(obj3.__proto__ === 17);

与JSON的差异

JSON 只答应"property": value syntax办法的特点界说。特点名必须用双引号括起来。且特点界说不答应运用简洁写法。
JSON中,特点的值仅答应字符串,数字,数组,true,false,或许其他JSON目标。
JSON中,不答应将值设置为函数。
Date 等目标,经JSON.parse()处理后,会变成字符串。
JSON.parse() 不会处理核算的特点名,会当做过错抛出。

defineProperty

Object.defineProperty() 办法直接在一个目标上界说一个新特点,或许修正一个现已存在的特点, 并回来这个目标
// 运用 __proto__
Object.defineProperty(obj, "key", {
 __proto__: null, // 没有承继的特点
 value: "static" // 没有 enumerable
     // 没有 configurable
     // 没有 writable
     // 作为默许值
});
// 显式
Object.defineProperty(obj, "key", {
 enumerable: false,
 configurable: false,
 writable: false,
 value: "static"
});
// 收回同一目标
function withValue(value) {
 var d = withValue.d || (
 withValue.d = {
  enumerable: false,
  writable: false,
  configurable: false,
  value: null
 }
 );
 d.value = value;
 return d;
}
// ... 和 ...
Object.defineProperty(obj, "key", withValue("static"));
// 假如 freeze 可用, 避免代码增加
// value, get, set, enumerable, writable, configurable
// 到目标原型上
(Object.freeze||Object)(Object.prototype);

configurable当且仅当这个特点描述符值为 true 时,该特点或许会改动,也或许会被从相应的目标删去。默许为 false。

enumerabletrue 当且仅当该特点呈现在相应的目标枚举特点中。默许为 false。

value 与特点相关的值。能够是任何有用的 JavaScript 值(数值,目标,函数等)。默许为 undefined。

writable true 当且仅当或许用 赋值运算符 改动与特点相关的值。默许为 false。

存取描述符一起具有以下可选键值:

get 一个给特点供给 getter 的办法,假如没有 getter 则为 undefined。办法将回来用作特点的值。默许为 undefined。
set 一个给特点供给 setter 的办法,假如没有 setter 则为 undefined。该办法将收到作为仅有参数的新值分配给特点。默许为 undefined。

ps:js中的变量界说

在JavaScript中,运用var来界说任何类型的变量,每一个变量仅仅用于保存数据的占位符。

var temp; //这句代码界说了一个变量,但其类型是不知道的,能够寄存任何类型的值,没有初始化的时分,test中存储是undefined。
var temp=2; //这句代码界说了一个变量,并直接初始化为数值型。
var temp="javascript"; // 这句代码界说了一个变量,并直接初始化微string型,单引号和双引号都能够,只需成对呈现就行。

2、变量的作用域

在Javascript中,运用var界说的变量,其作用域是在界说该变量的办法或函数内。也便是说,运用var界说的变量是局部变量。
例:

function test()
{
 var temp="Hello, Javascript!";
}

test(); //办法调用的时分创立变量并初始化,履行完毕后变量被毁掉。
alert(temp); //undefined。由于变量temp现已被毁掉,所所以未界说(undefined)。

假如在界说变量时,不运用var,那么界说的变量是大局变量。

例:

function test2() 
 { 
  temp2="Hello, Javascript!"; 
 } 
test2(); //调用办法时,创立变量并初始化,履行完毕后变量仍然存在。 
alert(temp2); //Hello, Javascript! 变量值仍然存在 

以上内容是小编给我们介绍的Javascript中的数据类型之旅,期望我们喜爱。

JavaScript根本的输出和嵌入式写法教程
JavaScript没有任何打印或许输出的函数。在HTML中,JavaScript一般用于操作HTML元素。操作HTML元素如需从JavaScript拜访某个HTML元素,您能够运用document.getElement

JavaScript中字面量与函数的根本运用常识
JavaScript字面量在编程言语中,一个字面量是一个常量,如3.14。数字(Number)字面量能够是整数或许是小数,或许是科学计数(e)。3.141001123e5字符串(Strin

深化解析JavaScript的闭包机制
JavaScript变量能够是局部变量或大局变量。私有变量能够用到闭包。大局变量函数能够拜访是有函数内部界说的变量,如:实例functionmyFunction(){vara=4;return

本周排行

更新排行

强悍的草根IT技能社区,这儿应该有您想要的! 友情链接:b2b电子商务
Copyright © 2010 touzhuwang75.com. All Rights Rreserved  京ICP备05050695号