尖峰对决:原始类型 VS 对象类型

 

本人初学JS,经慕女神指点而由实践入门,哐哐代码敲的飞起,犹如二师兄吃个人参果,duang一下没了,却说不出个中三味。听闻此界有一物.........



   本人初学JS,经慕女神指点而由实践入门,哐哐代码敲的飞起,犹如二师兄吃个人参果,duang一下没了,却说不出个中三味。听闻此界有一物,号称JS“圣经”,别名”大犀牛“,吾特前往观之!初见,吾险些跪了!叹曰:“嗯,这大犀牛的皮是真厚,肯定有内涵,一定是我的菜!放"牛"过来吧!"
  • 啰嗦一二(1) JS数据类型分为原始类型和对象类型;(2)名字都是人取的,在不同的地方,它们可能有不同的名字——原始类型,别名“基本数据类型”;对象类型,别名“引用数据类型”;(3)区别:原始值不能更改,对象值可以更改。(why?因为在内存中的存储方式不一样,原始值存储在栈内存(stack)中,对象值存储在堆内存(heap)中。)(what?“栈”是什么鬼?“堆”又是什么鬼?简单来说,就是数据存储的两个容器。“栈”中存储的是一个具体的值,可以直接拿来用,相当于One To One,不经手他人;“堆”存储的是一块数据,每块数据都有一个相应的地址,就像一把内涵丰富的锁,锁里藏着很多零件,它有一把钥匙,唯一的一把。那么,这把钥匙放在哪儿呢?一般放在“栈”里的一个变量身上,当你想调用一个对象值的时候,需要通过这把钥匙来打开对应的锁,然后才能使用里面的东西。
原始类型

   其值有5,分为:数字(number)、字符串(string)、布尔值(boolean)、null(空)、undefined(未定义)。
  1. 数字(number)(1)整型:一般以十进制表示,也可以使用十六进制。对于八进制有模式的限制。(2)浮点型:JS通过一种二进制法来表示分数,转换成我们常用的十进制分数,会产生一个精度问题,如:
    var x =0.3-0.2;var y =0.2-0.1; x == y;    //falsex ==0.1    //falsey ==0.1    //true
    所以,当使用浮点数进行计算的时候,要根据需要注意取整,比如动画。
  2. 字符串(string)一组放在引号里的大串字符序列。(1)单双引号可以交替使用,多次使用同种引号时,要注意添加“”来转义;(2)可使用String对象的所有属性和方法(PS:存在隐式转换,直接用就好了,没什么问题);(3)各种方法返回的都是一个新字符串,原字符串不变。
var str ="hello everybody";/*属性*/str.length;    //15:返回字符串的长度值/*方法*///1. charAt(index)    //返回index索引位的字符 str.charAt(0);    //h //2. substring(start,end)    //返回索引从start~end的字符   str.substring(1,4);    //ell //3. substr(start,length)    //返回索引从start开始,长度为length的字符串 str.substr(1,4);    //ello//4. slice(start,end)    //返回索引从start~end的字符str.slice(1,4);      //ell          //5. indexOf()    //返回目标字符在字符串中首次出现的索引值str.indexOf(“e”);      //1      //6. split()    //按指定字符将字符串分割成一个新数组(原字符串不变)str.split(“e”);      //  ["h", "llo ", "v", "rybody"],注意空格也算一个字符//还有一些方法,就不一一列举了         
  1. 布尔值(boolean)只有两个值:true/false。任意的JS值都可以转换为布尔值。(1)undefined、null、0、-0、NaN、“”(空字符串)的值会被转换成false;(2)除去(1)中的所有值,包括所有对象(数组)都会转换成true;
  2. null(空)(1)null是一个关键字,是一个空对象的占位符,常用于描述‘空值’;(2)类型:object 。
  3. undefined(未定义)可表示“空值”。(按英文字面意思理解)
对象类型

对象是属性的集合,每个属性都由"名/值对"构成(值可以是原始值,如数字、字符串,也可以是对象)。
  1. 注意(1)普通的JS对象是“命名值”的无序集合;(2)数组是一种特殊的对象,表示带编号的值的有序集合,拥有一些和普通对象不同的特有行为特性。(3)函数也是一种特殊的对象,是具有与它相关联的可执行代码的对象通过调用函数来运行可执行代码,并返回运算结果。函数的行为特征和其他对象都不一样,也可以当做普通对象来对待。
  2. 类(class)(1)类是由构造函数初始化的对象组成的集合。(PS:构造函数(constructor)是用new运算符新建的对象。)(2)分类数组(Array)类函数(Function)类日期(Date)类正则(RegExp)类错误(Error)类->错误类定义了那些表示JS程序中运行时错误和语法错误的对象。自定义类->通过根据需要定义构造函数注:类可看做对象类型的子类型。
  3. 属性和方法(1)只有JS对象才能拥有方法(2)数字、字符串、布尔值也可以拥有自己的方法(3)JS中只有null和undefined没有方法。
类型转换

除了null和undefined不能进行类型转换外,其他所有类型的值都能转换成其他类型。
  1. 原始值string/number/boolean,直接使用时,存在隐式转换;若通过调用String()、Number()、Boolean()显式的写出,则为显式转换;。注:null和undefined不能进行类型转换,否则会造成类型错误(TypeError)
  2. 对象值(1)toString()方法:返回一个反映这个对象的字符串;数组类(Array class):将每个数组元素转换为一个字符串,并在元素之间添加逗号后合并成结果字符串。函数类(Function class):返回该函数的实现定义的表示方式。通常是将用户定义的函数转换为JS源代码字符串。日期类(Date class):返回一个可读的日期和时间字符串。RegExp类(RegExp class):转换为表示正则表达式直接量的字符串。(2)valueOf()方法:返回对象本身注:在特定情况下,对象值转换为原始值有不同的方法。
比较

  1. 原始值只比较值:值相等时才相等。
    null==undefined;   //truenull===undefined;  //false
  2. 对象值只比较引用:当且仅当引用同一个基对象时,二者才相等。注:对象的比较并非值的比较:即使两个单独的对象包含同样的属性及相同的值,二者也不相等。各个索引元素完全相等的两个数组也不相等!
    var a =[1,2,3,4,5];var b =[1,2,3,4,5];a == b;    //false
var c = {x:1}
var d = {x:1}
c ==d; //false

如有错漏,欢迎各位大神指正,为谢!
慕课网

中国最大的IT技能学习平台

微信号:imooc--com



长按二维码点击“识别图中二维码”即可关注

微博: @慕课网


猛戳阅读原文进行学习吧!


    关注 慕课网imooc订阅号


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册