第一篇js文章,今天我将从基础部分,以及三座大山开始浅谈一下自己对js的理解,有不对的地方,请大神们告知修改
我们先来了解一下js的一些基础,
首先是数据类型,JS有两种数据类型,原始类型和引用类型,我们用typeof运算符来判断一个数据是何种类型,
值得一提得是,typeof只能区分值类型,除function外的引用类型将全部返回Object包括null,
所以typeof可以检测的值只有
undefined、string、number、boolean、function、object
typeof undefined //undefined typeof "zhangsan" //string typeof 100 //number typeof true //boolean typeof function a(){} //function typeof null //object typeof {} //object typeof [] //object
可以看到null,[],{}都返回了object,这不是我们想要看到的,如何区分引用类型呢,我们可以用instanceof运算符来进行区分,
[] instanceof Array //true ({}) instanceof Array //false ({}) instanceof Object //true null instanceof Object //false
instanceof运算符的用法为左边是需要确定的引用类型,右侧为相应的引用类型,若相同则为true,不同为false
可以看到instanceof解决了引用类型区分的问题,但是instanceof并不属于很严格的校验方式,特殊情况我会在后面的章节中提到
我们都知道js是弱类型语言,所以js会自动进行类型转换,==只检查值是否相等,===不仅检查值还要检查类型是否相等
在js中的变量计算----强制转换
//0、" "、false、[]用==检验是相同的, 0 == "" //0->false 与 ""->false进行比较 返回true [] == "" //true ({}) == "" //false 因为{}直接用来比较会报类型错误,所以需要用()运算符包裹
——————————————————————————————————————————————————————————————————————————————————
null == undefined //true null === undefined //false
从上述代码可以简单的理解一下js的类型转换,第三行代码特别有趣,在js中若仅以==判断时,
null与undefined会进行类型转换导致相同,运用这一特性,我们可以在日后写代码中用
类似obj.name == null 来既判断obj.name 是否为null又判断是否为undefined。
JS中的内置对象包括: 11个
String Number Boolean —— 包装类型
Array RegExp Math Date
Error
Function Object
Global: 是全局作用域对象: 在浏览器中被window代替
那么什么是包装类型呢 : 即保存一个原始类型的值 并提供操作原始类型值的API
在js中原始类型的值本身不具有任何功能,比如: var a=12.652; a.toFixed(2);
a是如何调用toFixed()函数的,因为在js中只要试图对原始类型的值调用函数时,都会自动创建包装类型对象
建立包装类型的过程分为以下几步:
1.在试图对原始类型的值调用任何函数时先判断原始类型的类型名
2.自动创建对应的包装类型对象,保存需要被操作的原始类型值
3.调用包装类型对象提供的API
4.API调用后包装对象自动释放
下面我们来展示一道小例题:
var str="haha"; str.len=5; console.log(str.len)
手快的小伙伴应该已经试出来了,没错是undefined,那么我们的.len去哪了呢
原理是这样的 str.len=5 -> new String(str).len=5;
//执行后,new String()没有变量接收,释放了!
console.log(str.len) -> console.log(new String(str).len);//此时的new String为新来的包装类型,并不认识len属性
改进:我们应该采取这种方式
var str=new String("haha"); str.len=5; //此时new String()被str变量引用,不会被释放! console.log(str.money); //5
好啦,今天的分享就到这里啦,如果有补充或者有错误请提示我改正,初来乍到请多指教
原文:http://www.cnblogs.com/Hexa-gram/p/7906644.html