JavaSctipt基础归纳,以及隐式转换的规则

原始类型:

原始类型 Undefined Null String Boolean Number Symbol
undefined null 所有字符串 true / false 所有数字/NaN symbol
        function show (){
            console.log( typeof undefined) // undefined
            console.log( typeof 2) //Number
            console.log( typeof "asd") // String
            console.log( typeof true)
            console.log( typeof null) 
            /** 
            也许有人会问,在typeOf 的时候,为什么null,会是Object?
            
            这其中是有历史原因的存在的,这实际上是JavaScript当时实现时的一个错误
            
            但是被ECMAScript沿用了。
            
            现在null,被认为是对象的占位符,从而解释了这一个矛盾
            
            但是,从技术的角度出发,它依旧是一个原始值。
            */
            console.log( typeof new Number("2"))
            console.log( typeof new String(2))
            console.log( typeof new Boolean(2))
        }
        show()

"symbol" 是ES6,新扩展的原始类型;
Symbol,表示独一无二的值。Symbol 值通过Symbol函数生成。

let s = Symbol();
typeOf s
// "symbol"  

特性和使用:

1.每个symbol都是独一无二的值。

2.不能使用new关键字。

3.Symbol函数可以接受一个字符串作为参数,表示对Symbol的描述。

let s1 = Symbol('a');
let s2 = Symbol('b');

s1 // Symbol(a)
s2 // Symbol(b)

s1.toString() // "Symbol(a)"
s2.toString() // "Symbol(b)"

4.Symbol函数如果传入一个对象,会被调用toString方法,将对象转为字符串,然后才生成Symbol值。

const obj = {
  toString() {
    return 'a';
  }
};
const sym = Symbol(obj);
sym // Symbol(a)

5.永不相等,多个Symbol函数传入的字符串,即使是一样的,也不会相等。

// 没有参数的情况
let s1 = Symbol();
let s2 = Symbol();

s1 === s2 // false

// 有参数的情况
let s1 = Symbol('a');
let s2 = Symbol('a');

s1 === s2 // false

6.不能与其他类型的值进行运算,会报错。

let sym = Symbol('My Symbol');

" Your and" + sym
// TypeError: can't convert symbol to string
` Your and ${sym}`
// TypeError: can't convert symbol to string

Number(sym) // TypeError
sym + 2 // TypeError


//Symbol值可以转为String。

Srting(sym)  // 'Symbol(My Symbol)'
sym.toSrting()  // 'Symbol(My Symbol)'

//Symbol可以转Boolean值

Boolean(sym)  //true;
!sym //false;
if(sym){ 
  // ....
}

引用数据类型:

Object的成员叫做对象,包括Array,Date,RegExp,Math,JSON,Function,等除了原始值外的所有成员。

基本包装类型

JavaScript 提供了三个特殊的引用类型:Boolean,Number,String。

在W3C文档中的解释是,Boolean,Number,String,是各自原始类型的引用类型。

也就是说,包装类型也是引用类型的一种,是对原始类型的封装,封装之后,既会拥有原始类型的功能,也有各自的特殊行为(方法)。

思考一下,我们能不能操作这种封装过实例?

var s1 = 'some text';
s1.color = 'red';
alert(s1.color);//undefined 

似乎,行不通。为什么呢? 原来,这种特殊的包装类型,也是有分隐式和显式创建的。
在我们平时操作字符串的时候,所调用的方法

var s1 = 'some text';
var s2 = s1.substring(2);

//可以将以下三个步骤想象成是执行了下列ECMAScript代码。
var s1 = new String('some text'); //(1)创建String类型的一个实例 
var s2 = s1.substring(2); //(2)在实例上调用指定的方法
s1 = null; //(3)销毁这个实例 

每当读取到一个基本类型值的时候,后台就会自动创建一个相对应的,基本包装类型的对象,从而可以合理的调用某些方法。

这种自动创建的基本包装类型的对象,只存在于执行该代码的那一瞬间,然后即刻被销毁掉。这就是为什么,我们不能直接操作基本包装类型的实例了。

如果想要操作包装类型的实例,当然也是可以的。就是显示的创建,使用new关键字。

var s1 = new String('some text');
s1.color = 'red';
alert(s1.color);//red

在这种情况下的包装类型,就会显得更加接近普通的引用类型了。

valueOf / toString (隐式转换)

Objec调用所得:

code
result

String调用所得:

code
result

Array调用所得:


code
result

Number调用所得:

code
result

Date调用所得:

code
result

Boolean 调用所得:

code
result

Function 调用所得:


code
result
Object String Array Number Date Boolean Function
valueOf 原始值 原始值 原始值 原始值 时间毫秒戳 原始值 函数类型字符输出
toString [object object] 原始值 join方法返回值 数字的字符串 本地时间字符串 true/false 字符串 字符串函数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,145评论 0 13
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,233评论 0 4
  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 1,052评论 0 1
  • 不将就小姐cc阅读 358评论 0 0
  • 宽敞的石殿,颇为的雄伟,只不过因为岁月侵蚀的缘故,如今的石殿,已是倒塌了一些,一些巨大的石柱崩断开来,横七竖八的倒...
    混沌天书阅读 276评论 0 0