javascript 中的类型

时间:2022-04-27 01:33:23

javascript 中的类型

js 是一门弱语言,各式各样的错误多种多样,特别是确定返回值有问题的时候,你会用什么来进行表示错误?

我一般有三个选择:

  1. null
  2. ''
  3. error
  4. {}

第一个选择 null 如果结果是空,倒底是什么意思,是正确还是错误,你在写代码时会很疑惑.

第二个选择 '' 空字符串,结果更糟,因为1. 可能弄混了返回值的类型,2. 想提供一些有用的信息也带不回来。

第三个选择 error ,可以,但是你需要去判断类型

第四个选择 {} 空对象,跟1. 2 没有什么区别

都不是一个很好的选择,因为 js 没有像 c 中的连合类型: union。

随着 es6 的普级,对像的解构语法,给了我很大的启发,用他来进行一个复合类型的表达是可行的。

我的类的设计是如下:

class Result {
constructor(error,data) {
this.error = error;
this.result = data;
} isFaulted() {
return !!this.error;
} getResult() {
return this.result;
} getError() {
return this.error;
} map(fn) {
if (this.isFaulted()) {
return Result.ofError(this.getError());
} else {
return Result.ofResult(fn && fn(this.getResult()));
}
} asCallback(cb) {
return cb && cb(this.getError(), this.getResult());
} asAsync() {
if (this.isFaulted()) {
return new Promise.reject(this.getError());
} else {
return new Promise.resolve(this.getResult());
}
} static ofResult (data) {
return new Result(null, data);
} static ofError(err) {
return new Result(err, null);
} static of(data, error) {
return new Result(error, data);
}
}

设计的特点:

  1. 分成两个部分,一个部分是结果数据,另一个部分是错误,这样就可以分开判断,而不用去判断数据的类型
  2. 结合对像的解构语法,let {result, error} = result ,就能很快知道是否是错误,语意更清晰。
  3. 结合函数式的思想,能进行链式调用如 map。
  4. 也整合了 promise 能进行异步的处理,对 async/await 也很合适

最重要的是减轻思想负担,不用去管返回结果什么情况下是对的,什么情况下的错的,这跟 golang 风格很像。

唯一会有问题的地方就是会传染,多了一些代码的调用, 不过写多了业务代码,我觉得这些都是小问题。

在万不得以的情况下,最外面再使用 try - catch 更好。

javascript 中的类型的更多相关文章

  1. 小结 javascript中的类型检测

    先吐槽一下博客园的编辑器,太不好用了,一旦粘贴个表格进来就会卡死,每次都要用html编辑器写,不爽! 关于javascript的类型检测,早在实习的时候就应该总结,一直拖到现在,当时因为这个问题还出了 ...

  2. Javascript学习1 - Javascript中的类型对象

    原文:Javascript学习1 - Javascript中的类型对象 1.1关于Numbers对象. 常用的方法:number.toString() 不用具体介绍,把数字转换为字符串,相应的还有一个 ...

  3. JavaScript中值类型和引用类型的区别

    JavaScript的数据类型分为两类:原始类型和对象类型.其中,原始类型包括:数字.字符串和布尔值.此外,JavaScript中还有两个特殊的原始值:null和undefined,它们既不是数字也不 ...

  4. JavaScript中Float类型保留两位小数

    JavaScript中Float类型保留两位小数 核心方法: num:要操作的数字     size:要保留的位数 parseFloat(num).toFixed(size); 实现代码如下:var  ...

  5. javaScript中其他类型的值转换为Boolean类型

    将javaScript中其他任意类型的值转换为对应Boolean类型的值. 一  将number类型的值转换为Boolean类型 数值为0: var myBoolean = new Boolean(0 ...

  6. 对JavaScript中变量类型的重新理解

    <JavaScript启示录>这本书中提出:JavaScript中,对象为“王”(JavaScript里的几乎所有东西都是对象或者用起来像对象). 飞燕草对JavaScript最深刻的理解 ...

  7. JavaScript中值类型与引用类型

    JavaScript中的变量类型有哪些? 值类型:字符串(string).数值(number).布尔值(boolean).null.undefined 引用类型:对象(Object).数组(Array ...

  8. javascript中boolean类型和其他类型的转换

    在javascript中,if语句括号中的表达式返回值可以是任何类型,即:if(a)中的a可以是boolean.number.string.object.function.undefined中的任何类 ...

  9. 编程笔记:JavaScript 中的类型检查

    在Badoo的时候我们写了大量的JS脚本,光是在我们的移动web客户端上面就有大概60000行,可想而知,维护这么多JS可是相当具有挑战性的.在写如上规模js脚本客户端应用的时候我们必须对一件事保持警 ...

随机推荐

  1. 【转】ACM&sol;ICPC生涯总结暨退役宣言—alpc55

    转自:http://hi.baidu.com/accplaystation/item/ca4c2ec565fa0b7fced4f811 ACM/ICPC生涯总结暨退役宣言—alpc55 前言 早就该写 ...

  2. SequoiaDB 系列之五 :源码分析之main函数

    好久好久没有写博客了,因为一直要做各种事,工作上的,生活上的,这一下就是半年. 时光如梭. 这两天回头看了看写的博客,感觉都是贻笑大方. 但是还是想坚持把SequoiaDB系列写完. 初步的打算已经确 ...

  3. MSI安装程序在Win8&sol;Win10及以上系统中DLL安装问题

    报的错误是: There is a problem with this Windows Installer package. A DLL required for this install to co ...

  4. Android SDK更新缓慢或无法更新的解决方法

    windows 解决方法就是修改C:\Windows\System32\drivers\etc\hosts文件.添加一行: 74.125.237.1       dl-ssl.google.com l ...

  5. Java中加载配置文件的集中方式&comma;以及利用ClassLoader加载文件 &period;

    我们往常进行文件的加载的时候 用到的都是  FileInputStream进行 文件的加载比如下面一个例子 : InputStream in=FileInputStream("1.prope ...

  6. sqlite3API函数

    回顾: DDL 表的创建.修改.删除 create table 表名(字段名 字段类型 [约束],...); alter table 表名 {rename to 新名字 | add column 字段 ...

  7. C&num;中简单的this与get的用法&lpar;string&comma;decimal&rpar;

    代码 namespace First{publicpartialclass Form1 : Form{public Form1(){InitializeComponent();} privatevoi ...

  8. git rewinding head to replay your work on top of it&period;&period;&period;

    git fetch origin git reset --hard origin/<branch>

  9. unity 改变鼠标样式的两种方法

    1.第一个直接改变鼠标样式 public var cursorTexture:Texture2D; private var changeFlag = false; function Update(){ ...

  10. JS同步与异步;

    JS的同步与异步 同步:代买从上往下的执行 异步:每个模块各执行各的,同时执行,互不干扰 四个异步事件:(1)定时器(2)ajax(3)时间的绑定(4)回调函数 现在用定时器来说一说setTimeOu ...