《你所不知道的javascript》持续更新

本文观点来自于《你所不知道的javascript》复制代码

EcmaScript类型包含语言类型和规范类型

js内置7种类型:包含 undefined null boolean string number object symboljavascript

1.typeofjava

  • typeof 会返回一个String

typeof typeof {} === "string"复制代码

  • typeof 具备安全机制,(对于undeclear变量的值返回undefined)
  • var a
    typeof a === "undefined"
    typeof b === "undefined"  //b是 undeclear
    // 咱们试图console.log(b) javascript会报错
    // ReferenceError: b is not defined
    // 因此 undefined 和 undeclear不同,此处a 是undefined b是undeclaear
    // 看下面代码
    // 想看存不存其余的js文件包不包含一个变量,可能会写下这个代码
    if($jq){
    //xxx    }
    //若是$jq没声明,会报错,利用typeof的安全防护机制能帮帮咱们解决
    if(typeof $jq!== "undefined")复制代码

咱们能够用typeof 运算符来查看值的类型es6

typeof undefined ==== "undefined"
typeof true === "boolean"
typeof 42 === "number"
typeof Symbol() === "symbol"
typeof null === "object"复制代码

typeof null 是javascript留下的一个bug,存在20年余,也许不会修复。数组

(!a && typeof a === "object") //true复制代码

能够经过上述方法判断是否为null安全

2.functionbash

function 是javascript的内置类型,其实是object 的一个 “子类型”函数

函数不单单是对象,能够拥有属性,例如lengthui

function a(b,c){
    a.b = b
    a.c = c
}
console.log(a.length) == 2复制代码

3 数组spa

数组也是对象,它是object子类型prototype

typeof [1,2,3] === "object"  //true复制代码

js基础知识复习-第二章(值)

array string number 是一个程序最基本的组成部分,但在js中,它们让人喜忧掺半。

1.数组

  • js的数组能够容纳任何类型的值

var a = [1,"2",[3]]
复制代码
  • 使用delete能够从数组中数组,单元删除数组的length并不会变化

var a = [1,"2",[3]]
delete a[0]
console.log(a,a.length)
//[empty, "2", Array(1)] 3复制代码
  • 数组和对象同样包含字符串键值key和属性,可是不会改变length

var a = [1,"2",[3]]
a["foo"] = "foo"
a.length === 3
a.foo === "foo"
复制代码

  • key值若是能够被强制类型转换为十进制数字,会当作数组索引处理

var a = [1,"2",[3]]
a["13"] = 42
a.length //14复制代码

2.类数组 - 具备数组的length和结构可是没有数组的一些方法

docuemnt.getElementByTagName("div")返回的值和function 的arguments都是类数组

,为了方便计算,咱们须要把他们转成数组

// 方法1
var arr = Array.from(arguments)
// 方法2
Array.prototype.slice.call(arguments)复制代码

3.字符串

字符串反转

string.split("") //string => array
.reverse() //array reverse
.join() //array => string复制代码

4.数字

number 采用IEEE 754双精度格式

// toExponential() 能够输出指数格式
var a = 500000000000
b = a.toExponential() //5e+11
//toFixed() 能够取小数后的位数
var a = 10.22334
a.toFixed(2) === 10.22
10.toFixed(2) // 报错 Uncaught SyntaxError: Invalid or unexpected token
0.1 + 0.2 === 0.3 //false
复制代码

整数的安全范围

参照mdn解释

Number.MAX_SAFE_INTEGER //9007199254740991
Number.MAX_VALUE // 1.7976931348623157e+308
Number.MIN_SAFE_INTEGER   //-9007199254740991

Number.isInterger() 检测是否在整数的安全范围以内

//polifly
Number.isInteger = Number.isInteger || function(value) {
  return typeof value === 'number' && 
    isFinite(value) && 
    Math.floor(value) === value;
};复制代码

void 0 和 void 1 等同于undefined

NaN

typeof不能判断number是不是NaN,应该用isNaN判断

let a = 1/'111a'
tupeof a === "unmber" //true
//es6 在Number.isNaN()复制代码

无穷数 Infinity

Number.MAX_VALUE + 大于0 的数都是 Infinity

相关文章
相关标签/搜索