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基础知识大集锦(二) 推荐收藏
Jan 13 Javascript
JQuery触发radio或checkbox的change事件
Dec 18 Javascript
javascript原型模式用法实例详解
Jun 04 Javascript
JS跳转手机站url的若干注意事项
Oct 18 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
Nov 15 Javascript
微信小程序三级联动选择器使用方法
May 19 Javascript
vue+springmvc导出excel数据的实现代码
Jun 27 Javascript
微信小程序网络封装(简单高效)
Aug 06 Javascript
微信小程序HTTP请求从0到1封装
Sep 09 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
Mar 06 Javascript
纯js+css实现在线时钟
Aug 18 Javascript
Jquery $.map使用方法实例详解
Sep 01 jQuery
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
DedeCMS dede_channeltype表字段注释
2010/04/07 PHP
CI框架源码阅读,系统常量文件constants.php的配置
2013/02/28 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
2014/04/08 PHP
php获取四位字母和数字的随机数的实现方法
2015/01/09 PHP
yii数据库的查询方法
2015/12/28 PHP
PHP编程计算文件或数组中单词出现频率的方法
2017/05/22 PHP
Laravel实现短信注册的示例代码
2018/05/29 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
判断及设置浏览器全屏模式
2014/04/20 Javascript
利用原生JavaScript获取元素样式只是获取而已
2014/10/08 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
WebView启动支付宝客户端支付失败的问题小结
2017/01/11 Javascript
将input框中输入内容显示在相应的div中【三种方法可选】
2017/05/08 Javascript
使用SVG基本操作API的实例讲解
2017/09/14 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
security.js实现的RSA加密功能示例
2018/06/06 Javascript
three.js 如何制作魔方
2020/07/31 Javascript
前端vue+elementUI如何实现记住密码功能
2020/09/20 Javascript
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
python执行子进程实现进程间通信的方法
2015/06/02 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
Python绘图之二维图与三维图详解
2020/08/04 Python
英国皇家邮政海外旗舰店:Royal Mail
2018/02/21 全球购物
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
查环查孕证明
2014/01/10 职场文书
致跳远运动员广播稿
2014/02/11 职场文书
质量在我心中演讲稿
2014/09/02 职场文书
企业党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
小学语文教师年度考核个人总结
2015/02/05 职场文书
人事任命通知
2015/04/20 职场文书
HTML基本元素标签介绍
2022/02/28 HTML / CSS
SQL Server2019安装的详细步骤实战记录(亲测可用)
2022/06/10 SQL Server