相思资源网 Design By www.200059.com
一.数据类型
Javascript是一种弱类型的脚本语言,它一共有6种数据类型,又被分为基础数据类型,特殊数据类型,复合数据类型。
1.基础数据类型:数值型,字符串型,布尔型
2.特殊数据类型:null,undefined(区别在于null需要显性赋值,而undefined表示没有赋值)
3.复合(引用)数据类型:Object(数组是特殊的对象)
注:理解基础数据类型和引用数据类型的区别。如函数参数传递
二. 包装类和基础数据类型的关系
对于基础数据类型,都有相应的包装类(Object对象)与之对应。
Number,String,Boolean
注:基础数据类型会在一定条件下转化成基础类型包装对象
复制代码 代码如下:
var str="这是一个基础字符串";
var length=str.length();
//当使用length()时,Javascript解释引擎会产生
//一个str的临时String对象,执行完后临时对象清除
三.如何判断数据类型
(1) typeof(鸡肋)
仅可检测出以下6种数据类型:number, string, boolean, undefined, object, function(注意!)
复制代码 代码如下:
alert(typeof(null)); //结果为object
alert(typeof(a)); //a未赋值,结果为undefined
因此判断基础数据类型可以如下:
复制代码 代码如下:
function type(o) {
return (o === null) ? 'null' : typeof(o);
}
(2)instanceof
但对于复合数据类型(除了function),则全部返回object,无法通过typeof判断
可使用instanceof检测某个对象是不是另一个对象的实例,注意instanceof的右操作数必须为对象:
复制代码 代码如下:
function Animal() {};
function Pig() {};
Pig.prototype = new Animal();
alert(new Pig() instanceof Animal); // true
instanceof不适合用来检测一个对象本身的类型
(3)constructor
复制代码 代码如下:
alert(1.constructor); // 报错
var o = 1;
alert(o.constructor); // Number
o = null; // or undefined
alert(o.constructor); // 报错
alert({}.constructor); // Object
alert(true.constructor); // Boolean
(4)Object.toString()
复制代码 代码如下:
function isArray(o) {
return Object.prototype.toString.call(o) === '[object Array]';
}
call和apply的区别:
它们都是Function.prototype的方法(针对方法的),它是Javascript引擎内在实现的。
实际上这两个的作用几乎是相同的,要注意的地方是call(thisObj[,arg1[, arg2[,)中的arg参数可以是变量,而apply([thisObj[,argArray]])中的参数为数组集合
方法是借给另一个对象的调用去完成任务,原理上是方法执行时上下文对象改变了.
(5)总结
复制代码 代码如下:
var _toS = Object.prototype.toString,
_types = {
'undefined' : 'undefined',
'number' : 'number',
'boolean' : 'boolean',
'string' : 'string',
'[object Function]' : 'function',
'[object RegExp]' : 'regexp',
'[object Array]' : 'array',
'[object Date]' : 'date',
'[object Error]' : 'error'
};
function type(o) {
return _types[typeof o] || _types[_toS.call(o)] || (o ? 'object' : 'null');
}
四.数据类型转换
Javascript有两种数据类型的转换方法:
一种是将整个值从一种类型转换为另一种数据类型(称作基本数据类型转换),
另一种方法是从一个值中提取另一种类型的值,并完成转换工作。
基本数据类型转换的如以下三种方法:
1.转换为字符型:String(); 例:String(678)的结果为"678"
2.转换为数值型:Number(); 例:Number("678")的结果为678
3.转换为布尔型:Boolean(); 例:Boolean("aaa")的结果为true
从一个值中提取另一种类型的值的如以下方法:
1.提取字符串中的整数:parseInt(); 例:parseInt("123zhang")的结果为123
2.提取字符串中的浮点数:parseFloat(); 例:parseFloat("0.55zhang")的结果为0.55
另外总结各种类型转换的方法
Number转化成字符串:String(number) 、
Number.toString(2/8/16);//分别代表二进制\八进制\十六进制默认(无参)10进制 、
toFixed(3) //保留小数点后3位
toExponextial(3); //小数点前1位, 小数点后3位如var n=123456.789; n.toExponextial(3);//1.234e+5即1.234X105
toPrecision(4); //返回指定位数 如果位数不够完全显示,则按指数表示法(3个方法都会4舍5入)
五.其他总结(容易忽视掉的东西)
1.parseInt的陷阱
以下部分摘自《Javascript精粹》:
parseInt是一个将字符串转换为整数的函数。它遇到非数字时停止解析,所以parseInt("16")与parseInt("16 tons")产生相同的结果。如果该函数提示我们出现了额外文本就好了,但是它不会那么做。
如果该字符串第一个字符时0,那么该字符串将被基于八进制而不是十进制来求值。在八进制中,8和9不是一个数字,所以parseInt("08")和parseInt("09")产生0作为结果。这个错误导致程序解析日期和时间时出现问题。幸运的是,parseInt可以接受一个基数作为参数,如此一来parseInt("08",10)结果为8.我建议你总是提供这个基数参数。
另外。下面这个会显示1:
alert(parseInt(0.0000001));
这是由于超过一定精度js就会用科学计数法记录数字,例如:
alert(0.0000001);
会得到1e-7,而parseInt会自动把参数转换成字符串的,那实际上就是:
复制代码 代码如下:
s = (0.0000001).toString();
alert(parseInt(s));
最后得到1就不奇怪了。
使用parseInt必须记住里面参数是转换成字符串再做转换的。
Javascript是一种弱类型的脚本语言,它一共有6种数据类型,又被分为基础数据类型,特殊数据类型,复合数据类型。
1.基础数据类型:数值型,字符串型,布尔型
2.特殊数据类型:null,undefined(区别在于null需要显性赋值,而undefined表示没有赋值)
3.复合(引用)数据类型:Object(数组是特殊的对象)
注:理解基础数据类型和引用数据类型的区别。如函数参数传递
二. 包装类和基础数据类型的关系
对于基础数据类型,都有相应的包装类(Object对象)与之对应。
Number,String,Boolean
注:基础数据类型会在一定条件下转化成基础类型包装对象
复制代码 代码如下:
var str="这是一个基础字符串";
var length=str.length();
//当使用length()时,Javascript解释引擎会产生
//一个str的临时String对象,执行完后临时对象清除
三.如何判断数据类型
(1) typeof(鸡肋)
仅可检测出以下6种数据类型:number, string, boolean, undefined, object, function(注意!)
复制代码 代码如下:
alert(typeof(null)); //结果为object
alert(typeof(a)); //a未赋值,结果为undefined
因此判断基础数据类型可以如下:
复制代码 代码如下:
function type(o) {
return (o === null) ? 'null' : typeof(o);
}
(2)instanceof
但对于复合数据类型(除了function),则全部返回object,无法通过typeof判断
可使用instanceof检测某个对象是不是另一个对象的实例,注意instanceof的右操作数必须为对象:
复制代码 代码如下:
function Animal() {};
function Pig() {};
Pig.prototype = new Animal();
alert(new Pig() instanceof Animal); // true
instanceof不适合用来检测一个对象本身的类型
(3)constructor
复制代码 代码如下:
alert(1.constructor); // 报错
var o = 1;
alert(o.constructor); // Number
o = null; // or undefined
alert(o.constructor); // 报错
alert({}.constructor); // Object
alert(true.constructor); // Boolean
(4)Object.toString()
复制代码 代码如下:
function isArray(o) {
return Object.prototype.toString.call(o) === '[object Array]';
}
call和apply的区别:
它们都是Function.prototype的方法(针对方法的),它是Javascript引擎内在实现的。
实际上这两个的作用几乎是相同的,要注意的地方是call(thisObj[,arg1[, arg2[,)中的arg参数可以是变量,而apply([thisObj[,argArray]])中的参数为数组集合
方法是借给另一个对象的调用去完成任务,原理上是方法执行时上下文对象改变了.
(5)总结
复制代码 代码如下:
var _toS = Object.prototype.toString,
_types = {
'undefined' : 'undefined',
'number' : 'number',
'boolean' : 'boolean',
'string' : 'string',
'[object Function]' : 'function',
'[object RegExp]' : 'regexp',
'[object Array]' : 'array',
'[object Date]' : 'date',
'[object Error]' : 'error'
};
function type(o) {
return _types[typeof o] || _types[_toS.call(o)] || (o ? 'object' : 'null');
}
四.数据类型转换
Javascript有两种数据类型的转换方法:
一种是将整个值从一种类型转换为另一种数据类型(称作基本数据类型转换),
另一种方法是从一个值中提取另一种类型的值,并完成转换工作。
基本数据类型转换的如以下三种方法:
1.转换为字符型:String(); 例:String(678)的结果为"678"
2.转换为数值型:Number(); 例:Number("678")的结果为678
3.转换为布尔型:Boolean(); 例:Boolean("aaa")的结果为true
从一个值中提取另一种类型的值的如以下方法:
1.提取字符串中的整数:parseInt(); 例:parseInt("123zhang")的结果为123
2.提取字符串中的浮点数:parseFloat(); 例:parseFloat("0.55zhang")的结果为0.55
另外总结各种类型转换的方法
Number转化成字符串:String(number) 、
Number.toString(2/8/16);//分别代表二进制\八进制\十六进制默认(无参)10进制 、
toFixed(3) //保留小数点后3位
toExponextial(3); //小数点前1位, 小数点后3位如var n=123456.789; n.toExponextial(3);//1.234e+5即1.234X105
toPrecision(4); //返回指定位数 如果位数不够完全显示,则按指数表示法(3个方法都会4舍5入)
五.其他总结(容易忽视掉的东西)
1.parseInt的陷阱
以下部分摘自《Javascript精粹》:
parseInt是一个将字符串转换为整数的函数。它遇到非数字时停止解析,所以parseInt("16")与parseInt("16 tons")产生相同的结果。如果该函数提示我们出现了额外文本就好了,但是它不会那么做。
如果该字符串第一个字符时0,那么该字符串将被基于八进制而不是十进制来求值。在八进制中,8和9不是一个数字,所以parseInt("08")和parseInt("09")产生0作为结果。这个错误导致程序解析日期和时间时出现问题。幸运的是,parseInt可以接受一个基数作为参数,如此一来parseInt("08",10)结果为8.我建议你总是提供这个基数参数。
另外。下面这个会显示1:
alert(parseInt(0.0000001));
这是由于超过一定精度js就会用科学计数法记录数字,例如:
alert(0.0000001);
会得到1e-7,而parseInt会自动把参数转换成字符串的,那实际上就是:
复制代码 代码如下:
s = (0.0000001).toString();
alert(parseInt(s));
最后得到1就不奇怪了。
使用parseInt必须记住里面参数是转换成字符串再做转换的。
标签:
数据类型
相思资源网 Design By www.200059.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
相思资源网 Design By www.200059.com
暂无Javascript学习笔记一 之 数据类型的评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?