1.number
使用64位浮点数表示范围+-1.797*10(308次方),+-5*10(-324次方),相当于C++的double
整数-2(53次方) 2(53次方)
十六进制0x开头 例0xff
八进制0o开头 0o377
二进制0b开头
使用e表示浮点数
6.02e23
1.47e-32
2.数的计算,在math类中有很多方法。
3.没有上溢,下溢。但有无限大无限小infinity -infinity
underflow会显示为0.
0/0会得到NaN
4.Number.MAX_VALUE 最大值
Number.MIN_VALUE 最小值
Number.NaN (0/0 或 Infintity/Infinity)
5.BigInt 64位整数,能表示更广的范围
1234n 十进制
0o7777n 八进制
0x80000000000000n 十六进制
0==0n //true
0===0n//false ===也检查类型是否匹配
二.string
utf-16 16bit的字符
使用方法 "" ''
一些用法:
//两行写作一行,使用\n
'two\nlines'
//一行写作三行,使用\
"one\
long\
line"
//使用反引号,两行写作两行
`the newline character at the end of this line
is include literally in this string`
字符串的比较
let string1="hello"
let string2="hellO"
string1===string2//是否相等
string1!==string2//是否不等
还可以使用< <= > >=
string 类的API方法
let s="Hello,world"
s.substring(1,4) //ell
s.slice(1,4)//ell
s.slice(-3)//rld
s.split(",")//["Hello","world"]
搜索:
s.indexof("l")//2
s.indexof("l",3)//3 从3后查找第一个l
s.indexof("zz")// -1
s.lastIndexOf("l")//10 最后一个l的位置
布尔搜索:
s.startWith("Hell")// true
s.endsWith("!")//false
s.includes("or")//true
修改字符串:
s.replace("llo","ya") //"Heya,world"
s.toLowerCase() //"hello,world"
s.toUpperCase() //"HELLO,WORLD"
s.normalize()//The normalize() method in JavaScript is used to convert a string into a normalized form, following a specified Unicode
normalization form. This is useful for comparing and manipulating strings that may contain different Unicode
representations of the same characters
定位:
s.charAt(0) //H
s.charAt(s.length-1)//d
s.charCodeAt(0)//he charCodeAt() method of String values returns an integer between 0 and 65535 representing the UTF-16 code unit at
the given index. charCodeAt() always indexes the string as a sequence of UTF-16 code units, so it may return lone
surrogates.
s.codePointAt(0)// the method returns the Unicode value at an index (position) in a string.
填充:
"x".padStart(3) //" x" 填充长度到3
"x".padEnd(3) //"x "填充长度到3
"x".padStart(3,"*")//"**x"填充长度到3
"x".padEnd(3,"-")//"x--"
修剪trim:
" test ".trim()//"test"
" test ".trimStart()//"test "
" test ".trimEnd()//" test"
重复:
"<>".repeat(5)//"<><><><><>"
string在Javascript中是不可改变的,上述方法返回的是一个新的string。
string可视为只读数组
let s="Hello,world"
s[0]//H
s[s.length-1]//d
反引号的使用:
将字符串连接
let name="Bill"
let greeting=`Hello ${ name }.`//greeting="Hello Bill."
${}被视为一个javascript表达式。计算的得到结果。将结果插入到模板字符串中。
String.raw()将原字符串返回一个带反引号的字符串。用于sql或者HTML
三。boolean
默认会转换成false的量:
undefined null 0 -0 NaN ""//空串
四.null和undefined
typeof null返回object
undefined 未定义变量,数组或对象不存在的元素,未定义函数返回值,和函数参数
Null和undefined 在===下是相等的
五。全局对象
全局常量:undefined Infinity NaN
全局函数:isNaN(),parseInt()将字符串转为int,eval()表达式处理,不建议使用。有安全风险
构造函数:Date(),RegExp(),String(),Object(),Array()
全局对象:Math,JSON
六.基本数据类型不能被更改,更改后其实返回的是一个新的基本数据类型。如字符串。
对象类型是引用类型,判等条件是他们都指向同一个对象时。
let c=Array.from(b)//es6数组拷贝。
类型转换表
value to String to Number toBoolean
undefined "undefined" NaN false
null "null" 0 false
true "true" 1
false "false" 0
""(empty string) 0 false
"1.2" 1.2 true
"one" NaN true
0 "0" false
-0 "0" false
1 "1" true
Infinity "Infinity" true
-Infinity "-Infinity" true
NaN "NaN" false
{}(object) true
[](empty array) "" 0 true
[9] "9" 9 true
['a'] NaN true
function(){} NaN true
七.==操作符和===操作符
===严格检查双方的类型和值。类型相等才可以
==进行转化
null==undefined(true)
"0"==0(true)
0==false(true)
"0"==false(true)
八.显示转换
Number("3") //3
String(false)//"false"
Boolean([])//true
有toString()方法可以通过方法转化为字符串
九.进制转换
let n=17
let binary="0b"+n.toString(2);//0b1001
let octal="0o"+n.toString(8);//0o21
let hex="0x"+n.toString(16);//0x11
Number类提供的类型转换方法
toFixed()将数转化为定点小数的字符串
toExponential()转化为指数标记法的字符串
toPrecision()有效数字
let n=123456.789
n.toFixed(0)//"1234567"
n.toFixed(2)//"123456.79"
n.toFixed(5)//"123456.78900"
n.toExponential(1)//"1.2e+5"
n.toExponential(3)//"1.235e+5"
n.toPrecision(7)//"123456.8"
n.toPrecision(10)//"123456.7890"
parseInt() parseFloat()全局转换函数,将字符串转化为整数,实数
parseInt(".1")//NaN
pasrseFloat("$72.47")//NaN
parseInt()第二个参数可以设置为进制数
parseInt("11",2)//3
parseInt("ff",16)//255
parseInt("077",8)//63
valueOf()
let d=new Date(2010,0,1);
d.valueof()//从1970.1.1到现在的毫秒数1262332800000
3.10
使用let定义变量,使用const定义常量,const需要初始化
let ,const拥有块级作用域
var不拥有块级作用域,而是在函数内都有效。
在函数外使用var拥有全局作用域。var属于globalThis对象。
var x=2;
可以通过globalThis.x=2;来使用。无法使用delete命令删除
全局作用域中的let 和const与global对象无关。
var使用可以放在定义之前。var会被提升顺序。不会报错。
let使用必须放在定义之后,是一种较好的习惯。