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 相关文章推荐
onsubmit阻止form表单提交与onclick的相关操作
Sep 03 Javascript
jWiard 基于JQuery的强大的向导控件介绍
Oct 28 Javascript
javascript中关于&& 和 || 表达式的小技巧分享
Apr 10 Javascript
AngularJs expression详解及简单示例
Sep 01 Javascript
js仿百度音乐全选操作
Jan 13 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
Jun 17 Javascript
使用 Node.js 实现图片的动态裁切及算法实例代码详解
Sep 29 Javascript
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
May 05 Javascript
vue + axios get下载文件功能
Sep 25 Javascript
vue与iframe之间的信息交互的实现
Apr 08 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
Apr 10 Javascript
你不知道的 TypeScript 高级类型(小结)
Aug 28 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 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
Thinkphp实现站点静态化的方法详解
2017/03/21 PHP
Array对象方法参考
2006/10/03 Javascript
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
jQueryUI的Dialog的简单封装
2010/06/07 Javascript
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
在JS中如何调用JSP中的变量
2014/01/22 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
2014/10/20 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
理解 JavaScript Scoping & Hoisting(二)
2015/11/18 Javascript
浅谈JavaScript中promise的使用
2017/01/11 Javascript
jQuery实现Select下拉列表进行状态选择功能
2017/03/30 jQuery
js es6系列教程 - 基于new.target属性与es5改造es6的类语法
2017/09/02 Javascript
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
2019/02/20 jQuery
如何在wxml中直接写js代码(wxs)
2019/11/14 Javascript
jQuery操作事件完整实例分析
2020/01/10 jQuery
Javascript异步流程控制之串行执行详解
2020/09/27 Javascript
Python爬虫实例扒取2345天气预报
2018/03/04 Python
python构建指数平滑预测模型示例
2019/11/21 Python
Python 识别12306图片验证码物品的实现示例
2020/01/20 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
2020/08/11 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
智能电子秤、手表和健康监测仪:Withings(之前为诺基亚健康)
2018/10/30 全球购物
如何让Java程序执行效率更高
2014/06/25 面试题
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2013/05/03 面试题
构造方法和其他方法的区别
2016/04/26 面试题
写自荐信有哪些不宜?
2013/10/17 职场文书
公司担保书格式范文
2014/05/12 职场文书
质量保证书怎么写
2015/02/27 职场文书
求职自我推荐信
2015/03/24 职场文书
创业计划书之干洗店
2019/09/10 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
HTML中的表格元素介绍
2022/02/28 HTML / CSS