博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TypeScript和JavaScript的一些小技巧记录
阅读量:5970 次
发布时间:2019-06-19

本文共 2093 字,大约阅读时间需要 6 分钟。

项目里使用到的技巧,记录一下,会持续更新。

JS的技巧完全可以使用到TS上哦。

JS

向下取整

Math.floor(4.5); // 4

简写:

var num = 4.5;~~num;num << 0;num >> 0;num >>> 0;

四种写法都会返回向下取整后的值,即4。

但是要注意,简写的方式用在负数上会得到错误的结果:

Math.floor(-4.1); // -5~~-4.1; // -4-4.1 << 0; // -4-4.1 >> 0; // -4-4.1 >>> 0; // 4294967292

或者说在负数上变成了向上取整,另外由于 >>> 是无符号的位移操作,所以会得到一个巨大的正数。另外一点:没有 <<< 这个操作符哦。

字符串转数字

parseInt("4.5"); // 4parseFloat("4.5"); // 4.5parseInt({a:1}); // NaN

简写:

var num = "4.5";+num; // 4.5num = {a:1};+num; // NaN

转Boolean值

Boolean(5.99); // trueBoolean(0); // falseBoolean(1); // trueBoolean(null); // falseBoolean(undefined); // falseBoolean(""); // falseBoolean("1"); // trueBoolean({}); // true

简写:

!!5.99; // true!!0; // false!!1; // true!!null; // false!!undefined; // false!!""; // false!!"1"; // true!!{}; // true

void 0

如果编写的代码会直接发布,尽可能用 void 0 代替 null 和 undefined,因为在某些浏览器中,undefined可以被赋值导致判断全部错误。

比如在TS中,编译后,使用到的undefined都会替换为 void 0。

TS

多使用接口方式

比如传递参数时,这么写:

func(a: Point);

只能接受Point类型的变量,如果用下面的写法:

func(a: {x:number, y:number});

就可以接受带有x和y的所有变量,可以更好的复用该函数。

快速得到属性

一般的写法:

let x = point.x;let y = point.y;

简写:

let {x, y} = point;

一般的写法:

let arr = "100;200;300".split(';');let a = arr[0];let b = arr[1];let c = arr[2];

简写:

let [a, b, c] = "100;200;300".split(';');

快速写入属性

一般的写法:

let a = 0;let b = "heelo";let obj = {a: a, b: b};

简写:

let a = 0;let b = "heelo";let obj = {a, b};

参数类类型控制

比如我们需要传递一个参数,该参数是MyClass类的类型,而不是实例时,一般只能用any,实际上是可以指定类型的,写法如下:

public func(classType: { new(): MyClass }): void;

传入类型,得到该类型的实例

一般用于工厂或对象池等:

export function getInstance
(Class: {
new () : T}): T { return new Class();}

单例的简写方式

static get instance(): Obj {  return this._instance || (this._instance = new Obj());}

类属性控制

interface IObj {  // 可选属性  name?: string;  // 只读属性  readonly age: number;}

控制动态属性:

interface Map
{ [key: string]: T;}

用接口来规范一个对象

比如我们有一个接口,可以用下面的方法来规范一个对象,而不用编写一个实现该接口的类:

1 export interface IPoint { 2   x: number; 3   y: number; 4 } 5  6 export function foo(point: IPoint) { 7   // ... 8 } 9 10 foo(
{x: 100, y: 100});

如果打错属性名称或缺少必须的属性会报错,属性类型不匹配也会报错,可以大大降低写错的问题。另外添加额外属性是允许的。

 

转载地址:http://mvwox.baihongyu.com/

你可能感兴趣的文章
分库分表的面试题3
查看>>
error MSB8008: 指定的平台工具集(v110)未安装或无效。请确保选择受支持的 PlatformToolset 值...
查看>>
Docker之 默认桥接网络与自定义桥接网卡
查看>>
Ehcache 缓存
查看>>
【03-14】日常资源访问备份
查看>>
用js操作table、tr、td 「字体样式及TD背景图片」
查看>>
DefWndProc/WndProc/IMessageFilter的区别
查看>>
[20180817]校内模拟赛
查看>>
typedef BOOL(WINAPI *MYFUNC) (HWND,COLORREF,BYTE,DWORD);语句的理解
查看>>
写接口的体会
查看>>
linux基础(2)-网卡配置
查看>>
VS2015智能提示由英文改为中文
查看>>
Java多维数组使用注意事项
查看>>
WEB程序员需要掌握的十大MySQL优化技巧
查看>>
JavaScript事件对象
查看>>
一.操作系统
查看>>
导出excel表格,前端和后台导出
查看>>
m邻接
查看>>
两边对齐
查看>>
antd中的form表单 initialValue导致数据不更新问题
查看>>