TypeScript简单入门(三):TypeScript原始数据类型表达

原始数据类型包括:布尔值、数值、字符串、nullundefined 以及 ES6 中的新类型 Symbol和 ES10 中的新类型 BigInt
TypeScript声明变量时需要指定数据类型具体表达式

let 变量名:数据类型
let propName : string =  'test' ;

布尔值

let isDone : booblean =  false;

以构造函数方式:

let createdByNewBoolean:Boolean=new Boolean(1);

//直接调用 Boolean 也可以返回一个 boolean 类型:
let createdByNewBooleans:boolean=Boolean(1);

在 TypeScript 中,boolean 是 JavaScript 中的基本类型,而 Boolean 是 JavaScript 中的构造函数。其他基本类型(除了 null 和 undefined)一样,不再赘述。

数值

let decLiteral:number=6;
let hexLiteral:number=0xf00d;
//es6中的二进制表示法
let binaryLiteral:number=0b1010;
//es6中的八进制表示法
let octalLiteral:number=0o744;
let notANumber:number=NaN;
let infinityNumber:number=Infinity;

编译后

var decLiteral = 6;
var hexLiteral = 0xf00d;
//es6中的二进制表示法
var binaryLiteral = 10;
//es6中的八进制表示法
var octalLiteral = 484;
var notANumber = NaN;
var infinityNumber = Infinity;

其中 0b1010 和 0o744 是 ES6 中的二进制和八进制表示法,它们会被编译为十进制数字。

字符串

let myName:string='Tom';

模板字符串

let sentence:string =`Hello,my name is ${myName}.I'll be ${myAge + 1} years old next month.`;

其中 ` 用来定义 ES6 中的模板字符串,${expr} 用来在模板字符串中嵌入表达式。

空值

JavaScript 没有空值(Void)的概念,在 TypeScript 中,可以用 void 表示没有任何返回值的函数:

function alertName():void {
    alert('My name is Tom');
}

声明一个 void 类型的变量没有什么用,因为你只能将它赋值为 undefined 和 null

let unusable:void=undefined;

Null和Undefined

在 TypeScript 中,可以使用 null 和 undefined 来定义这两个原始数据类型:

let u:undefined=undefined;
let n:null=null;

与 void 的区别是,undefined 和 null 是所有类型的子类型。也就是说 undefined 类型的变量,可以赋值给 number 类型的变量:

let num:number=undefined;

//或

let uf=undefined;
let newNum:number=uf;

而 void 类型的变量不能赋值给 number 类型的变量:

let uv:void;
let nums:number=uv;//Type 'void' is not assignable to type 'number'

Symbols

Symbols是ES6新增的原始数据类型,ts中使用时需要先配置
1、配置tsconfig.json
"lib": ["es6"], 需要dom时还要将"dom"添加进lib,如:console.log语句

2、特性
(1)不能和其他值计算,如加键、字符串拼接等
(2)可以调用.toString()返回字符串
(3)本身作为true类型存在
(4)类似for in遍历时,不会遍历symbol属性
可通过Object.getOwnPropertySymbols(对象)/Reflect.ownKeys(obj)获取symbol属性

3、语法

    let x=Symbol();                     即使再次调用也不会生成相同值
    let x=Symbol('传入值作为标识');        增加可读性,即使传入相同值也不会相等
    let x=Symbol.for('传入值作为标识');            当使用.for方法创建的标识值存在时会返回那个symbol,否则会创建 
    let x=Symbol.keyFor(Symbol.for方法创建的变量); 返回.for创建时传入的标识值

    作为对象/类属性
        let obj={
            [x]:'值'      必须使用[]进行解析,调用时也只能obj[x]进行调用
        }
        class C={
            [x](){}
        }
    
    内置symbol属性
        (1)Symbol.hasInstance
            当使用instanceof时,之后的对象将会执行对象[Symbol.hasInstance]执行的方法
            如:
                let obj={
                    [Symbol.hasInstance](otherObj){ 参数为instanceof前比较的对象
                        ...
                    }
                }
              console.log(x instanceof obj)
              
        (2)Symbol.isConcatSpreadable
            当为数组设置Symbol.isConcatSpreadable属性为false时,调用.concat方法不会拆开
            如:
                let arr=[1,2]
                arr[Symbol.isConcatSpreadable]=false;
                console.log([].concat(arr,[3,4])) 返回 [[1,2],3,4]
                
        (3)Symbol.species
            创建衍生对象的构造函数
        
        (4)Symbol.match
            当调用字符串的match方法时,会触发match中对象的该属性对应的方法
            同理还有:Symbol.search、Symbol.replace、Symbol.split
            如:
                let obj={
                    [Symbol.match](string){
                        ...
                    }
                }
                'xxx'.match(obj)
                
        (5)Symbol.iterator
            指向默认的遍历器方法
            let arr=[1,2,3];
            1、返回遍历器:
                const iterator=arr[Symbol.iterator]
            2、通过遍历器进行遍历:
                iterator.next();  会返回当前遍历的内容{value:值,done:是否遍历完成的布尔值}
                
        (6)Symbol.toPrimitive
            当对象被转换成原始类型时,调用Symbol.toPrimitive属性指定的方法
            如:
                let obj={
                    [Symbol.toPrimitive](type){ type为被转换成的原始类型
                        ...
                    }
                }
                obj++;   type为number
        
        (7)Symbol.toStringTag
            当对象调用toString()方法时,返回的结果会附带Symbol.toStringTag对应的值
            如:
                let obj={
                    [Symbol.toStringTag]:lion
                    作为方法必须时get方法
                    get [Symbol.toStringTag](){
                        return 'lion'
                    }
                }
                obj.toString(); 打印[object lion]
        
        (8)Symbol.unscopables
            当使用with方法时,无法获取到的属性
                with(对象){
                    直接属性名即可获取,等同于对象.属性名
                }
            Array.prototype[Symbol.unscopables]可查看数组中不能使用with访问的属性

BigInt

bigint 数据类型是用来表示那些已经超出了 number 类型最大值的整数值,对于总是被诟病的整数溢出问题,使用了 bigint 后将完美解决。

bigint 是一种基本数据类型(primitive data type)。
JavaScript 中可以用 Number 表示的最大整数为 2^53 - 1,可以写为 Number.MAX_SAFE_INTEGER。如果超过了这个界限,可以用 BigInt来表示,它可以表示任意大的整数。

在一个整数字面量后加 n 的方式定义一个 BigInt,如:10n 或者调用函数 BigInt():

const theBiggestInt: bigint = 9007199254740991n
const alsoHuge: bigint = BigInt(9007199254740991)
const hugeString: bigint = BigInt("9007199254740991")

theBiggestInt === alsoHuge // true
theBiggestInt === hugeString // true

BigInt 与 Number 的不同点:

BigInt 不能用于 Math 对象中的方法。
BigInt 不能和任何 Number 实例混合运算,两者必须转换成同一种类型。
BigInt 变量在转换为 Number 变量时可能会丢失精度。

参考
原始数据类型
TypeScript BigInt
TypeScript Symbol

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

推荐阅读更多精彩内容