TypeScript和JavaScript的一些小技巧记录
项目里使用到的技巧,记录一下,会持续更新。
JS的技巧完全可以使用到TS上哦。
JS
向下取整
- Math.floor(4.5); //
简写:
- 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; //
或者说在负数上变成了向上取整,另外由于 >>> 是无符号的位移操作,所以会得到一个巨大的正数。另外一点:没有 <<< 这个操作符哦。
字符串转数字
- parseInt("4.5"); //
- parseFloat("4.5"); // 4.5
- parseInt({a:1}); // NaN
简写:
- var num = "4.5";
- +num; // 4.5
- num = {a:1};
- +num; // NaN
转Boolean值
- Boolean(5.99); // true
- Boolean(0); // false
- Boolean(1); // true
- Boolean(null); // false
- Boolean(undefined); // false
- Boolean(""); // false
- Boolean("1"); // true
- Boolean({}); // 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<T>(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<T> {
- [key: string]: T;
- }
用接口来规范一个对象
比如我们有一个接口,可以用下面的方法来规范一个对象,而不用编写一个实现该接口的类:
- export interface IPoint {
- x: number;
- y: number;
- }
- export function foo(point: IPoint) {
- // ...
- }
- foo(<IPoint> {x: 100, y: 100});
如果打错属性名称或缺少必须的属性会报错,属性类型不匹配也会报错,可以大大降低写错的问题。另外添加额外属性是允许的。
TypeScript和JavaScript的一些小技巧记录的更多相关文章
- ( 译、持续更新 ) JavaScript 上分小技巧(三)
最近家里杂事较多,自学时间实在少的可怜,所以都在空闲时间看看老外写的内容,学习之外顺便翻译分享~等学习的时间充足些再写写自己的一些学习内容和知识点分析(最近有在接触的:复习(C#,SQL).(学习)T ...
- ( 译、持续更新 ) JavaScript 上分小技巧(四)
后续如有内容,本篇将会照常更新并排满15个知识点,以下是其他几篇译文的地址: 第一篇地址:( 译.持续更新 ) JavaScript 上分小技巧(一) 第二篇地址:( 译.持续更新 ) JavaScr ...
- ( 译、持续更新 ) JavaScript 上分小技巧(二)
考虑到文章过长,不便于阅读,这里分出第二篇,如有后续,每15个知识点分为一篇... 第一篇地址:( 译.持续更新 ) JavaScript 上分小技巧(一) 第三篇地址:( 译.持续更新 ) Java ...
- ( 译、持续更新 ) JavaScript 上分小技巧(一)
感谢好友破狼提供的这篇好文章,也感谢写这些知识点的作者们和将他们整理到一起的作者.这是github上的一篇文章,在这里本兽也就只做翻译,由于本兽英语水平和编程能力都不咋地,如有不好的地方也请多理解体谅 ...
- 19个JavaScript简化编码小技巧
这篇文章适合任何一位基于JavaScript开发的开发者.我写这篇文章主要涉及JavaScript中一些简写的代码,帮助大家更好理解一些JavaScript的基础.希望这些代码能从不同的角度帮助你更好 ...
- Javascript字符串拼接小技巧
在Javascript中经常会遇到字符串的问题,但是如果要拼接的字符串过长就比较麻烦了. 如果是在一行的,可读性差不说,如果要换行的,会直接报错. 在此介绍几种Javascript拼接字符串的技巧. ...
- docker的小技巧记录(如果使用了更多会继续添加)
docker小技巧 复制本地sql脚本到docker容器mysql中进行使用 # 找到容器 docker ps # 复制文件 cp ./xxx.sql container-id:/tmp/ # 进入容 ...
- JavaScript的一些小技巧(转)
本文是一篇翻译文章,原文信息如下: 原文:45 Useful JavaScript Tips, Tricks and Best Practices 作者:Saad Mousliki JavaScrip ...
- js_开发小技巧记录(一)
(一) 生成从minNum到maxNum的随机数 <!DOCTYPE html> <html> <head> <meta charset="UTF- ...
随机推荐
- raid 搭建
RAID几种常见的类型 RAID类型 最低磁盘个数 空间利用率 各自的优缺点 级 别 说 明 RAID0 条带卷 2+ 100% 读写速度快,不容错 RAID1 镜像卷 2 50% 读写速度一般,容错 ...
- linux相关操作命令
1.复制文件:cp -r file ./src 2.删除文件:rm -rf file 3.解压文件:tar -xvf bianque.tar.gz
- linux命令基础三
使用cat命令进行文件的纵向合并使用cat命令实现文件的纵向合并: 例如:使用cat命令将baby.age.baby.kg和baby.sex这三个文件纵向合并为baby文件的方法:cat baby.a ...
- xml模块、项目开发过程
一.XML模块 xml指的是可扩展标记语言,是一种定义电子文档结构和描述的语言,可以用来标记数据.定义数据类型. 什么时候用xml? 当需要自定义文档结构时,使用xml.在java中经常会使用xml来 ...
- 骚气男孩saochi boy 唐砖 插曲
试听下载链接:https://pan.baidu.com/s/1ObB9FYbgzegcE25io6zCEg
- 轻松掌握Redux-Action使用方法
轻松掌握Redux-Action使用方法 Redux-Action主要有两个方法,createAction和createAction,只要掌握了这两个方法就会了redux-action的使用. cre ...
- Space Elevator [POJ2392] [DP][优化]
题目大意 n件物品,第i件hi高,有ci件,最高的一件不能超过ai的高度.问最高能堆多高 输入: 第一行,一个n 接下来每一行,为hi,ai,ci 输出,最高堆多高 样例输入: 37 40 35 23 ...
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第4章编程练习9
#include <iostream>#include <string>using namespace std;struct CandyBar{ //string kind; ...
- helm-chart-1-简单概念介绍-仓库搭建-在rancher上的使用
简单的概念介绍: Chart是helm管理的应用的打包格式,一个chart对应一个或一套应用.内部是一系列的yaml描述文件,以为为yaml 服务的文件. 三个部分,helm .tiller.repo ...
- Vue(七)发送Ajax请求
发送AJAX请求 1. 简介 vue本身不支持发送AJAX请求,需要使用vue-resource.axios等插件实现 axios是一个基于Promise的HTTP请求客户端,用来发送请求,也是vue ...