摘要:来自你不知道的对未初始化和未声明的变量执行操作符都返回了值类型是第二个只有一个值的数据类型,这个特殊的值是。
基本类型
主要有:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、Symbol
undefined
在使用 var,let,const 声明变量但未对其加以初始化时,这个变量的值就是undefined
注意点:
undefined 是一种类型 区别于 "undefined"
番外:作用域是一套规则,用于确定在何处以及如何查找变量(标识符)。如果查找的目的是对变量进行赋值,那么就会使用LHS查询;如果目的是获取变量的值,就会使用RHS查询。RHS查询找到了一个变量,但是你尝试对这个变量的值进行不合理的操作,比如试图对一个非函数类型的值进行函数调用,或着引用null或undefined类型的值中的属性,那么引擎会抛出另外一种类型的异常,叫作TypeError。ReferenceError同作用域判别失败相关,而TypeError则代表作用域判别成功了,但是对结果的操作是非法或不合理的。 来自--《你不知道的JS》
对未初始化和未声明的变量执行typeof操作符都返回了undefined值;
null
Null类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null值时会返回"object"的原因
注意点 undefined与null的关系
== 操作符会进行隐式转换 === 不会
Boolean
注意点:
Number
注意点
NAN
NAN 与任何值进行运算都是NAN
NAN 与任何值都不相等 包括它自己
对于字符串转换 用parseInt(),parseFloat 转换空字符串会返回NaN(Number()对空字符返回 0)
String
几乎所有值都具有toString() 方法;
Symbol
引用类型Object 、Array基本引用类型
如下~
var str = "hello"; //string 基本类型 var s2 = str.charAt(0); alert(s2); // h
毫无疑问上面的string是一个基本类型,但是它却能召唤出一个 charAt() 的方法,这是什么原因呢?
主要是因为在基本类型中,有三个比较特殊的存在就是:String Number Boolean,这三个基本类型都有自己对应的包装对象。并且随时等候召唤。包装对象呢,其实就是对象,有相应的属性和方法。至于这个过程是怎么发生呢,其实是在后台偷偷发生的。
//我们平常写程序的过程: var str = "hello"; //string 基本类型 var s2 = str.charAt(0); //在执行到这一句的时候 后台会自动完成以下动作 : ( var _str = new String("hello"); // 1 找到对应的包装对象类型,然后通过包装对象创建出一个和基本类型值相同的对象 var s2 = _str.chaAt(0); // 2 然后这个对象就可以调用包装对象下的方法,并且返回结给s2. _str = null; // 3 之后这个临时创建的对象就被销毁了, str =null; ) alert(s2);//h alert(str);//hello
注意这是一瞬间的动作 实际上我们没有改变字符串本身的值。就是做了下面的动作.这也是为什么每个字符串具有的方法并没有改变字符串本身的原因。
由此我们可以知道,引用类型和基本包装对象的区别在于:生存期
引用类型所创建的对象,在执行的期间一直在内存中,而基本包装对象只是存在了一瞬间。
所以我们无法直接给基本类型添加方法:
var str = "hello"; str.number = 10; //假设我们想给字符串添加一个属性number ,后台会有如下步骤 { var _str = new String("hello"); // 1 找到对应的包装对象类型,然后通过包装对象创建出一个和基本类型值相同的对象 _str.number = 10; // 2 通过这个对象调用包装对象下的方法 但结果并没有被任何东西保存 _str =null; // 3 这个对象又被销毁 } alert(str.number); //undefined 当执行到这一句的时候,因为基本类型本来没有属性,后台又会重新重复上面的步骤 { var str = new String("hello"); // 1 找到基本包装对象,然后又新开辟一个内存,创建一个值为hello对象 str.number = undefined // 2 因为包装对象下面没有number这个属性,所以又会重新添加,因为没有值,所以值是未定义;然后弹出结果 str =null; // 3 这个对象又被销毁 }
那么我们怎么才能给基本类型添加方法或者属性呢?
答案是在基本包装对象的原型下面添加,每个对象都有原型。
//给字符串添加方法 要写到对应的包装对象的原型下才行 var str = "hello"; String.prototype.last= fuction(){ return this.charAt(this.length); }; str.last(); // 5 执行到这一句,后台依然会偷偷的干这些事 { var _str = new String("hello");// 找到基本包装对象,new一个和字符串值相同的对象, _str.last(); // 通过这个对象找到了包装对象下的方法并调用 _str =null; // 这个对象被销毁 }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/103857.html
摘要:创建数组的基本方式有两种第一种是使用构造函数,如下所示第二种是使用数组字面量表示法,如下所示类型每个函数都是类型的实例,而且都与其他引用类型一样具有属性和方法。 js中有六种数据类型,包括五种基本数据类型(Number,String,Boolean,Undefined,Null),和一种复杂数据类型(Object)。 typeof 操作符由于js中的变量是松散类型的,所以它提供了一种检...
摘要:的输出方式浏览器弹出警告弹框,它会阻塞代码执行弹框,它显示的内容会默认转换成字符串显示例如弹出一个可输入的弹框,还有两个按钮确认和取消点击确定,返回在输入框输入的内容,点击取消返回空确认弹框有两个按钮,确认和取消,点击确认返回为点击取消为, js的输出方式: 1、alert();浏览器弹出警告弹框,它会阻塞代码执行;alert弹框,它显示的内容会默认转换成字符串显示; 例如:alert...
摘要:所以相对于简单数据类型而言,他们占用内存比较小,如果放在堆中,查找会浪费很多时间,而把堆中的数据放入栈中也会影响栈的效率。六总结本文总结了数据类型及其声明赋值更新时在内存堆栈中的表现,可以更深入的理解这些数据类型。 JS数据类型 与 内存堆栈 一、前言 JS的数据类型已经是大家都很熟悉的东西了,但是大家是否对这些数据类型在内存中的分配了解,甚至在操作这些变量时,内存中是如何表现的,本文...
摘要:引用数据类型及堆内存引用数据类型是保存在堆内存中的对象,他的大小是不固定的。基础数据类型在变量对象里可以直接对应对应的值,而引用数据类型是存储在堆里的,在变量对象中对应的是堆内存的地址。因为我们修改本质上是修改了堆内存里的数据。 因为以前前端开发跟数据存储打交道比较少,javascript又具有自动垃圾回收机制。数据结构以及存储相关的概念,其实是很容易被前端er忽略的。...
摘要:对于与的设计在中所设计的纯对象类型的与方法,它们的返回如下方法返回值对象本身。与三个强制转换函数,所对应的就是在标准中的三个内部运算转换的对照表。 在JS中的运算符共同的情况中,(+)符号是很常见的一种,它有以下的使用情况: 数字的加法运算,二元运算 字符串的连接运算,二元运算,最高优先 正号,一元运算,可延伸为强制转换其他类型的运算元为数字类型 当然,如果考虑多个符号一起使用时,...
阅读 2352·2021-09-08 09:45
阅读 3285·2021-09-08 09:45
阅读 3050·2019-08-30 15:54
阅读 3311·2019-08-26 13:54
阅读 1345·2019-08-26 13:26
阅读 1358·2019-08-26 13:23
阅读 875·2019-08-23 17:57
阅读 2144·2019-08-23 17:14