资讯专栏INFORMATION COLUMN

JavaScript的类型小记

lykops / 937人阅读

摘要:原始类型引用类型中没有类但是有类型类型分两种原始类型和引用类型保存对象的引用原始类型的复制是直接复制多个副本互不干扰引用类型中只保存引用对象实例只有一份解除引用使用会触发自动垃圾回收还提供了种内建类型内建类型可以用来实例化他们也是保存

https://icbd.github.io/wiki/web/2016/10/07/js%E7%B1%BB%E5%9E%8B.html

原始类型 && 引用类型

JavaScript中没有但是有类型.
类型分两种--原始类型(string,number,boolean,null,undefined)和引用类型(保存对象的引用).

原始类型的复制是直接复制,多个副本互不干扰.
var a = "haha";
var b = a;

a = "hehe";

console.log(a); //hehe
console.log(b); //haha
引用类型中只保存引用,对象实例只有一份.
var arr = ["haha","hehe"];
var arr2 = arr;
arr.push("heihei");

console.log(arr); //["haha", "hehe", "heihei"]
console.log(arr2); //["haha", "hehe", "heihei"]

解除引用使用null,会触发自动垃圾回收.

arr = null;

JavaScript还提供了6种内建类型-Object,Array,Function,Date,Error,RegExp.

内建类型可以用new来实例化,他们也是保存对象引用.

判断类型

typeof鉴别类型.

console.log(typeof true);//"boolean"
console.log(typeof "你好!");//"string"
console.log(typeof 2016);//"number"
console.log(typeof undefined);//"undefined"
console.log(typeof null);//"object" 这个是特例,应该用 n === null 来判定


console.log(typeof [1, 2, 3]);//"object"

var obj = {
    name: "haha",
    age: 123

};
console.log(typeof obj);//"object"

var add = function (a, b) {
    return a + b;
};
console.log(typeof add);//"function"

对于引用类型, 可以用instanceof来判定构造来源.
instanceof可判定继承, 所有对象都是Object的实例.

var arr = [1, 2, 3, 4];
console.log(arr instanceof Array); //true
console.log(arr instanceof Object); //true

function Person(name) {
    this.name = name;
}
var xiaoMing = new Person("小明");

console.log(xiaoMing instanceof Person); //true
console.log(xiaoMing instanceof Object); //true

console.log(Person instanceof Function); //true
console.log(Person instanceof Object); //true
灵异现象1

在原始类型上调用方法???

var str = "hello world";
console.log(str.toUpperCase());//HELLO WORLD

实际上,js引擎做了些额外工作:

var str = "hello world";
var temporary = new String(str);
var _temporary = temporary.toUpperCase();
temporary = null;

console.log(_temporary);

这里的String叫原始封装类型.
这个过程叫自动打包,在原始对象的值被读取的时候进行.

console.log(str instanceof String);// false

instanceof 没有涉及到str值的读取,所以不会生成临时对象,str也就不会被判定为String.

灵异现象2
var f = new Boolean(false);
if (f) {
    console.log("it is true.");
} else {
    console.log("it is false.");
}

// "it is true."

f在这里是一个Boolean的对象,对象总会判为真.即使他的内容是false.

JavaScript的false只有以下几种:

false
0
""

undefined
null
NaN

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/80636.html

相关文章

  • JavaScript使用小记

    摘要:简单地说程序就是数据和方法计算机能做的就是计算这个数据可以是字符串各种类型的数值整数小数等类内的属性根本上是还是的基本数据类型布尔类型的东东为了更加快速地写出代码现在的语言都是高层次的抽象即所谓的高级编程语言了高级编程语言中的一些特性如访问 简单地说, 程序就是数据和方法, 计算机能做的就是计算, 这个数据可以是: 1.字符串, 2.各种类型的数值(整数, 小数等), 3.Java类内...

    stefan 评论0 收藏0
  • javascript数组小记

    摘要:它们的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为的成员,然后方法会返回该成员,返回该成员的位置。 几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构。 它存储一系列同一种数据类型的值,但是在javascript里可以在数组里保存不同类型的值,但是我们最好还是要遵守最佳实践,不要那么做。 创建和初始化,javascript声明,创建和...

    smartlion 评论0 收藏0
  • JS编译之 LHS RHS(你不知道JavaScript 小记一)

    摘要:关于两个专业术语的讨论起自对你不知道的一书的阅读学习。遇到,编译器会询问作用域是否已经有一个该名称的变量存在于同一个作用域的集合中。摘录来自你不知道的。 JS 编译之 LHS RHS 一、前言 最近和朋友聊技术的时候,聊到 LHS RHS,我竟然没听说过 没听说过。。。 于是成功引起了我的好奇心。 关于两个专业术语的讨论起自对《你不知道的JavaScript》一书的阅读学习。 二、编译...

    Cristic 评论0 收藏0
  • 父子组件通信爬坑小记

    摘要:的大小写事件的名字没有自动化的大小写转换,触发的事件名必须和见提供的事件名完全匹配的情况下才能正常运行。父组件向子组件传参时,无论何种命名方式,必须使用同一名字进行接收。 kebab-case:短横线命名法,多个单词之间使用短横线-进行连接,单词全部小写。如:first-name,user-info,create-order。camelCased:驼峰命名法,第一个单词小写,从第二个单...

    wslongchen 评论0 收藏0
  • 前端小白面经小记

    摘要:前端小白最近面试几家公司,写点面经分享给大家,同时记录下自己的缺点以供后期补足,各个公司的开发方向不同,请各位理性看待。直接现场手敲触发的样式。数组去重如何实现如果用的话,里面如何写排序算法。对象何时被修改心态需要调整好,不紧张不匆忙。 前端小白最近面试几家公司,写点面经分享给大家,同时记录下自己的缺点以供后期补足,各个公司的开发方向不同,请各位理性看待。 问题相关 Css 布局方式有...

    FuisonDesign 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<