Node.js学习笔记(二)
JavaScript数据类型
- 原始类型 (值类型不可变)
- 数字
- 布尔值
- 字符串
- 对象类型(可变的)引用类型
- 特殊值
- null(空)
- undefined(未定义)表示一种出乎意料的错误空缺
- Symbol(唯一值ES6),有Symbol函数生成(不加new)
P.S. java自出差类型不可变
所有字符串都是不可变的,因为分配的时候,字符串空间分配后就不可变
判断数据类型typeof
typeof 1 //number
typeof true //boolean
...
typeof null //object 这是一个bug
typeof undefined //undefined
原始类型特性
-
按值进行比较
-
属性不能被改变,增加和删除
-
var s = "abc"; s.length = 1; s.length //3 属性不能被修改
-
-
原始类型都有相应的构造函数,能生成原始类型的包装对象
- 数字 Number()
- …
原始类型的包装对象
- 原始类型的包装对象是对象类型,更对应原始类型值不相等
- 原始类型没有私有方法,但可以从对应的包装器借调方法
- 包装对象构造函数调用时不加new(构造函数变普通函数),则变为类型转换函数
Number('9')===9 //true
new Number(9) === 9 //false
数字类型
js统一采用754标准,精度范围就那样,数字表现弱化。
算数运算
数字类型包装对象Number
Math对象
- 一个js内置对象(库)
- 属性
- Math.E 自然对象
- Math.Pi
- 方法
- Math.abs() //绝对值
- Math.cell() //向上取整
- 方法(ES6扩展)
与数值相关的一些全局方法(重要的常用方法)
- isFinit方法返回一个布尔值,检查某个值是不是正常数值。
- parseInt方法用于字符串转为整数
- parseInt(1,23)
布尔类型
- 包装对象Boolean
字符串类型
- js字符串没有字符类型
- 单引号或者双引号表示字符串
模版字符串
- ES6新增更加方便的摸板字符串,用反引号(`)标识
- 可以表示多行字符串,所有的空格和缩紧都会保留
- 可以用${ }嵌入表达式
`${x} + ${y} = ${x+y}=${sum(x,y)}`
用途:可以用于生成网页
标签模版
-
在模版字面量前添加标签(实际是函数)
myTag
my string
-
标签函数的实际形式
function tag(模版字符串组,各个插入值,...){
// 返回一个字符串
}
tag `hello ${a+b} world{a*b} `
- 标签常用于过滤HTML字符串,防止用户输入内容和多语言转换(国际化处理)
var sender = `you&me`
function SafeHtml(){
}
var html = SafeHtml`<p>用户${sender}评论${commender}</p>`;
字符串类型包装对象String
- String的所有方法都不改变初始的字符串,涉及修改内容的都会返回一个新的字符串对象
- length方法判断长度
- indexOf,lastIndexOf,位置,尾部匹配
- trim去除两端的
- match
- search
- replace
- inculde()是否包含
- repeat()重复次数
类型转换–隐式转换
- 当使用的类型和预期类型不一样时会进行自动的类型转换
- 转换为字符串,主要发生在加法,字符串+非字符串,会统一转化为字符串,因为字符串出错几率小
类型转换–显式转换
- 转换为布尔值,用Boolean函数,规则同隐式转换
- 转为字符串 String方法
- 转为数值 Number函数,以可以parseInt和parseFloat函数
布尔运算
- 不等式不能连写
- 短路求值
if(b&&a/b>2){} //避免除0
if(a==0||b=func()) //避免不必要的求值
位运算
- 只对整数起作用,但是js却没有整数,都是64位浮点数。
- 做位运算的时候用64位模拟32位整数
- 左右移
- ^ 异或
- & 与
- | 或
- ~ 非