Javascript学习笔记一 之 数据类型


Posted in Javascript onDecember 15, 2010

一.数据类型
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 相关文章推荐
Javascript String.replace的妙用
Sep 08 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
Sep 21 Javascript
基于jquery的web页面日期格式化插件
Nov 15 Javascript
JavaScript日期类型的一些用法介绍
Mar 02 Javascript
javascript框架设计之框架分类及主要功能
Jun 23 Javascript
javascript设计简单的秒表计时器
Sep 05 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
Mar 07 Javascript
discuz表情的JS提取方法分析
Mar 22 Javascript
Angularjs实现下拉框联动的示例代码
Aug 22 Javascript
Angular如何在应用初始化时运行代码详解
Jun 11 Javascript
JS实现电脑虚拟键盘的操作
Jun 24 Javascript
javascript数组includes、reduce的基本使用
Jul 02 Javascript
iframe 父窗口和子窗口相互的调用方法集锦
Dec 15 #Javascript
jQuery Ajax使用 全解析
Dec 15 #Javascript
JQuery 应用 JQuery.groupTable.js
Dec 15 #Javascript
javascript 冒泡排序 正序和倒序实现代码
Dec 14 #Javascript
javascript中的关于类型转换的性能优化
Dec 14 #Javascript
JavaScript学习笔记之获取当前目录的实现代码
Dec 14 #Javascript
根据一段代码浅谈Javascript闭包
Dec 14 #Javascript
You might like
php pack与unpack 摸板字符字符含义
2009/10/29 PHP
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
yii框架表单模型使用及以数组形式提交表单数据示例
2014/04/30 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
javascript按位非运算符的使用方法
2013/11/14 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
js 日期比较相关天数代码
2014/04/02 Javascript
Struts2+jquery.form.js实现图片与文件上传的方法
2016/05/05 Javascript
js生成随机颜色方法代码分享(三种)
2016/12/29 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
2017/01/22 Javascript
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
python让图片按照exif信息里的创建时间进行排序的方法
2015/03/16 Python
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
python中logging库的使用总结
2017/10/18 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
python最小生成树kruskal与prim算法详解
2019/01/17 Python
WxPython建立批量录入框窗口
2019/02/27 Python
python 为什么说eval要慎用
2019/03/26 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
2019/08/29 Python
python 实现一个反向单位矩阵示例
2019/11/29 Python
python实现高斯投影正反算方式
2020/01/17 Python
你需要学会的8个Python列表技巧
2020/06/24 Python
python跨文件使用全局变量的实现
2020/11/17 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
CSS3教程(6):创建网站多列
2009/04/02 HTML / CSS
中国跨镜手机配件批发在线商店:TVC-Mall
2019/08/20 全球购物
美国美食礼品篮网站:Gourmet Gift Baskets
2019/12/15 全球购物
澳大利亚体育和露营装备在线/实体零售商:Find Sports
2020/06/03 全球购物
护士自我评价范文
2014/01/25 职场文书
党员干部2014全国两会学习心得体会
2014/03/10 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
2022/05/25 SQL Server
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript