原始值与引用值
基本概念
1.原始值,表示单一的数据(数据本身),如10,“abc”,true等。
ES设计了6种原始值:Undefined、Null、Boolean、Number、String和Symbol(符号类型:通常用来做标识)。
2.引用值,表示有多个值(原始值或其他引用值)构成的对象。
实际操作对象时,访问的是保存对象的内存地址,即该对象的引用(在堆内的地址)。
动态属性
1.原始值是不可改变的
2.引用值(对象)
可以随时添加、修改和删除其属性和方法
let person = new Object();//person保存的是对对象的引用
person.name = "John";
person.showMe = function () {
console.log("Hi, I'm " + this.name);
};
3.原始值不能有属性
let one = "Tom";
one.age = 20;
console.log(one, one.age); //Tom undefined
//当one.age=20;赋值后就销毁了
值传递
赋值,即将值复制给变量的过程。
let a = 100;
let b = a;
b++;
console.log(a, b);
//不是修改值,实际是有三个值的出现
let obj1 = { value: 100 };
let obj2 = obj1;
obj2.value = 200;
console.log(obj1.value, obj2.value);
//obj1和obj2引用的是一个对象
确定类型
通过typeof操作符来判断一个值的类型。
let s = "Nick";
let b = true;
let i = 22;
let u;
let n = null; //代表空引用,只和对象有关系
let obj = new Object();
let a = [1, 2, 3];
console.log(typeof s); //string
console.log(typeof b); //boolean
console.log(typeof i); //number
console.log(typeof u); //undefined
console.log(typeof n); //object
console.log(typeof obj); //object
console.log(typeof a); //object
数值
算术运算
1.运算符
包括:+、-、*、/、%、**(指数操作符,ES6新增)。
2.溢出(overflow)
当数值运算结果超过了JavaScript能表示的数值上限时发生,结果为Infinity,若超过了负数范围,则为-Infinity。
基于±Infinity的加、减、乘、除等算术运算结果依然是±Infinity。
但 Infinity/Infinity 为 NaN
3.下溢(underflow)
当运算结果无限接近于零,并比JavaScript能表示的最小值还小时发生。JavaScript会返回0,若当一个负数发生下溢时,则返回-0。
4.被零整除
简单的返回±Infinity。
但 0/0 为 NaN
数值转换
JavaScript提供了3个函数可将非数值转换为数值。
Number( )、parseInt( )和parseFloat( )。
Number(false) //0
Number(null) //0
Number(undefined) //NaN
Number(“011”) //11
Number(“1.1”) //1.1
Number(“0xf”) //15
Number(“”) // 0
parseInt(22.5) //22
parseInt(“0xA”) //10
parseInt(“A”, 16) // 10
parseFloat(“3.14159e3”) //3141.59
布尔值
1.取值
true和false
2.常用于控制结构
if,while,for
3.利用隐式转换
let x = 100;
let y = null;
let z;
if (x) {
console.log(x); //100
}
if (y != null) {
console.log(y); //undefined
}
if (z) {
console.log(z); //undefined
}
字符串
基本概念
字符串是由一组16位值组成的不可变的有序序列。
长度是其所含16位值的个数。
连接
字符串用+连接
"abc"+{value:10} //"abc[object Object]"
"abc"+{value:10,toString:function(){return this.value.toString();}}
//"abc10"
先在当前找,找不到会到上一层的object进行找
let v={value:10,toString:functiono(){return this.value;}}
String(v) //10
常用方法
let b="Hello, Javascript"; // undefined
b.substring(1,4) // "ell"
b.slice(1,4) //"ell"
b.slice(-3) //"ipt"
b.substr(2,3) //"llo"
b.indexOf("l") //2
b.lastIndexOf("l") //3
b.indexOf("l",3) //3
b.split(", ") //(2) ["Hello", "Javascript"]
b.replace("s","S") //"Hello, JavaScript"
b.concat("!") //"Hello, Javascript!"
b.toUpperCase() //"HELLO, JAVASCRIPT"
" abc ".trim() //去掉两端的空格"abc"
扩展
API
1.includes(),startsWith(),endsWith()
{
let str='string';
console.log(str.includes('r'));//true
console.log(str.startsWith('str'));//true
console.log(str.endsWith('ng'));//true
}
2.repeat()
{
let str='abc';
console.log(str.repeat(2));//abcabc
}
3.padStart(),padEnd()
{
console.log('1'.padStart(2,'0'));//01
console.log('1'.padEnd(2,'0'));//10
}
若省略第二个参数,则会用空格补齐。