【读书笔记】JavaScriptの范例

媒介

此篇小结泉源与《你不知道的JavaScript》和《JavaScript高等程序设计》的连系??也许是的,龟速总结中…

七种内置范例

  1. null
  2. undefined
  3. boolean
  4. number
  5. string
  6. object
  7. symbol

除了object,其他都成为基础范例
变量没有范例,值才有。
typeof总返回一个字符串。

null

范例检测
由于typeof检测null的效果为object,所以在推断的时刻须要如许推断:


var a = null;
(!a && typeof null === "object"); //true

undefined

范例检测

typeof undefined === "undefined"; //true

变量未持有值是undefined,但并非未声明,不过下面效果都是undefined:

var a;
typeof a;  //"undefined"
typeof b;  //"undefined"

平安提防
防备涌现直接抛出未声明的毛病,不能直接用if(变量)的要领来推断变量是否是存在,能够用以下两种要领:

if(typeof DEGUB  !== "undefined") {}
if(window.DEBUG) {}

boolean

范例检测

typeof true === "boolean"; //true

number

范例检测

typeof 42 === "number"; //true

JS并没有真正意义上的整数,运用双精度花样(64位),42.0等同于42。

数字示意

  1. 默许十进制示意,小数末了的0被省略。
  2. 迥殊大和迥殊小的用指数显现,与用toExponential()效果雷同。
  3. 数字前面的0可省略。
  4. 小数点后小数末了的0也能够省略。
  5. 挪用Number.prototype的要领:toFixed()显现小数位数。
  6. 挪用Number.prototype的要领:toPrecision()指定有用数位的显现位数。

注重:运算符会优先认为是有用数字字符

42.toFixed(3); //SynataxError
(42).toFiex(3); //42.000
0.42.toFixed(3); //0.420
42..toFixed(3); //0.420
42 .toFixed(3); //42.000

string

范例检测

typeof "42" === "string"; //true

字符串和字符串数组

  1. 都是类数组,有length属性,有indexOf()和concat()要领。
  2. 字符串不可变(建立返回新值),数组可变,但a[i]在老版本IE中不允许,准确用a.CharAt(i)。
  3. 字符串能够借用要领处置惩罚,如:Arrray.prototype.join.call(a,’-‘);
  4. 数组有reverse()要领,字符串没有。能够用以下要领(对庞杂字符如Unicode、星号不实用):

    var c=a.split().reverse().join('');
    

object

typeof返回object对象都包含一个内部属性[[Class]],但这个属性没法直接接见,
能够经由过程Object.prototype.toString.call()检察

Object.prototype.toString.call([1,2,3]);
// "[object Array]"

Tips:如果基础范例值,null和undefined

Object.prototype.toString.call(null);
// "[object Null]"
Object.prototype.toString.call(undefined);
// "[object Undefined]"

而其他的基础范例,会被包装为响应的封装对象。

函数

范例检测
function是object的子范例,其length属性为参数个数,然则typeof推断效果有function:

type of function a(){} === "function"; //true

内建函数/原生函数:
罕见的有String()、Number()、Boolean()、Array()、Object()、Function()、RegExp()、Date()、Error()、Symbol(),能够被看成组织函数来运用,建立出来的是封装了的基础范例值。

Tips:
typeof返回的是对象范例的子范例。
万不得已,不运用Object()、Function()、RegExp()。
Date.now()猎取当前时候戳,在ES5之前是Date.getTime()。
ES5最先,运用Object.create(null)建立的对象[[Prototype]]属性为null,且没有valueOf()和toString()要领。

数组

范例检测
数组也是object的子范例


type of [1,2,3] === "object"; //true

类数组转换
1.slice()常用于把类数组转换为数组:

Array.prototype.slice.call(arguments);

2.ES6中的Array.from(arguments)完成雷同作用。

Array(…)
Array(…)组织函数能够不带new关键字。
若只要一个参数,参数会被作为数组的预设长度(只是length变化了)。而且在差别浏览器中显现的效果也有点差别。map()遍历会失利,而join()会胜利,它假定数组不为空,然后经由过程length来遍历。

var a = Array.apply(null,{length: 3});
a; // [undefined,undefined,undefined]

能够如许替代建立。

注重点
delete能够把元素删除,但length并不会发生变化。

封装/拆封

能够用Object()还能输自行封装。
拆封对象能够用valueOf()函数。

symbol

标记是具有唯一性的特别值,用它来定名对象属性不容易致使重名,但控制台没法直接接见它的值。
范例检测

typeof Symbol() === "symbol"; //true

定义
ES6z中一些预定义标记,以Symbol静态属性情势涌现,如Symbol.create、Symbol.iterator等。

obj[Symbol.iterator] = function(){/*...*/}

定义时刻不能带new关键字。
经由过程Object.getOwnPropertySymbols()能够获得。

范例转换

JS的强迫转换总返回标量基础范例值
范例转换发生在静态言语的编译阶段,强迫转换发生在动态类言语运行时。

ToString

基础范例字符串转化划定规矩:
null -> null、undefined -> undefined
数字遵照通用划定规矩,包含极小、极大、以及指数情势。

一般对象转化划定规矩:
除非自行定义,不然返回内部属性[[Class]]值。

JSON字符串化
JSON.stringify(…)
不平安的JSON值,如undefined、function、symbol和包含轮回援用的都没法处置惩罚。
在对象里碰到undefined、function和symbol会自动疏忽,在数组中返回null(保证位置稳定)。

ToNumber

true -> 1
false -> 0
undefined -> NaN
null -> 0

处置惩罚失利返回NaN,对0开首的十六进制数不按十六进制处置惩罚,按十进制。
关于对象,会先转换为响应基础范例,再操纵,先搜检valueOf()再用toString(),若都不返回基础范例值,发生TypeError毛病。

~运算符

~返回2的补码,大抵等同于-(x+1)。

var a = "Hello World";
if(~a.indexOf("lo")){ //...}

~~来截除字符串,只实用于32位数字,对负数的处置惩罚也不太一样。X|0也能够。

Number()、parseInt()

Number不允许剖析字符串有非数字字符。
parseInt()的第一个字符是x或许X,转换为十六进制数字。0则转换为八进制数字。

Boolean

发起运用Boolean(a)和!!a来举行显现强迫转换。

    原文作者:MOCHIKO
    原文地址: https://segmentfault.com/a/1190000013278615
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞