一.String
1.length 获取字符串长度
2.原始类型值始终存在栈空间,不可更改,最后由浏览器清理;
3.null和undefined没有toString方法,调用会报错;
console.log(nul.toString());
console.log(undefined.toString()); //都会报错
//NaN可以用toString()方法
console.log(NaN.toString());
4.String()函数可以将任意类型转换成字符串;
console.log(String(null)); //null
console.log(String(undefined)); //undefined
5.单引号/双引号的字符串不支持在编辑器内直接enter换行,结果会报错,需要加 \
6.es6 字符串支持换行,支持模板语法
var a="张三";
var age=18;
document.write(a+"同学,年年"+age+"岁!");
//es6 支持模板语法
document.write(`${a}同学,年年${age}岁!`)
二.函数
1.函数不调用就不会执行;
2.函数调用表达式的值有return返回值决定;
三.js代码执行步骤
1.语法检查;
2.变量提升(提升用var声明的变量,但不提升值)
3.函数提升(提升function声明的,提升整个函数体)
4.执行语句;
四.es6反引号支持换行,支持模板语法
五.字符串方法:
- (1)indexOff()在原字符串中寻找指定的第一个字符串,返回相应索引;
var s = "How are you? I'm fine. Think you!"
console.log(s.indexOf("a")); //4
(2)indexOff()可以有第二个参数,意思是从第二个参数的位置处开始查找第一个参数中的字符串,第二个参数必须是数字;
console.log(s.indexOf("r",2)); //5
console.log(s.indexOf(2,"r")); //-1
(3)indexOff()找不到指定字符返回-1;
- substring(start,end) 从start开始到end-1结束截取字符串;
只有一个参数时,直接截取到最后;
当end<start时。自动交换end和start;
console.log(s.substring(0,4)); //How
console.log(s.substring(4,0)); //How
3.substr(start,length) 从开始位置到截取的长度;
console.log(s.substr(0,3)); //How
4.slice(start,end) 从start开始到end-1结束截取字符串;
end和start不能交换,start<end;
slice永远无法取到最后一位;
console.log(s.slice(-4,-1)); //you
5.trim() 去掉前后空格,中间的无法去掉;
6.charAt() 从字符串里取某个位置的字符;
console.log(s.charAt(1)); //o
7.charCodeAt() 从字符串里取某个字符的编码;
console.log(s.charCodeAt(1)); //111
六.对象
1.构造对象的两种方式
var obj1 = {
name: "张三",
age: 21,
gender: "mail",
chinese: true,
sayHello1: function() {
console.log("hello world1111!")
},
sayHello2: function() {
console.log("hello world2222!")
}
}
var obj2 = new Object; //var obj2={}
obj2.name = "李四";
2.访问对象属性的方式:对象.属性名 对象[“属性名”]
console.log(obj1.sayHello1());
console.log(obj1["name"]);
//当不确定访问哪个属性时,在中括号里放变量可以访问
alert( obj1[user] )
//obj1.user==undefined
//访问对象没有的属性,值为undefined
七.包装对象只有三种:new Boolean/String/Number;
//new 操作符操作(调用)函数,操作结果一定是引用类型
//引用类型的值就可以追加属性
//new 操作符每使用一遍,就是创建一个新的对象(引用类型值)
var obj=new Object;//var obj={}
var obj1=new Object;
// var obj1=obj;
console.log(obj==obj1);//false
//引用类型的两个变量,当他们是存储的同一个空间地址值,他们才相等
var arr1=[];
var arr2=arr1;
arr1[0]=10000;
console.log(arr2);//true
// obj.name="sish"
// console.log(obj.name);
//包装对象new Boolean/String/Number
var Str=new Boolean;
console.log( Str );
Str.name="sishuihua";
console.log( Str.name )
var arr=[];
arr.name="faiugfk";
console.log(arr.name)
//原始类型不可更改
var str="fakhfa";
console.log( str.length );//(new String(str)).length,临时创建包装对象
str.length=100;//(new String(str)).length,临时创建包装对象销毁
console.log( str.length );//(new String(str)).length,6
# //**字符串(对象/原始值)length 属性都是只读的**
var str1=new String(str);
console.log(str1)
console.log(typeof str1);//object
str1.length=100;
console.log(str1.length);
str1.test="abcd";
console.log(str1.test);
console.log(str1.substring)
str1.substring=100;
console.log(str1.substring)
var bol=new Boolean(true);
bol.length=100;
console.log(bol.length);
var mystr1="fki";
mystr1.test=100;
console.log(mystr1.test)
if(mystr1.test){//undefined,进不了if语句
console.log(mystr1.length)
}
//数组的length 属性是可读可改的
// var myarr=[1,2,3];
// console.log(typeof myarr);//object
// console.log(myarr.length);
// myarr.length=1000;
// console.log(myarr.length);
var s = "test";
s.len = 4;//给它设置一个属性
var t = s.len;
console.log(t)
八、原始类型与引用类型的区别:
一:原始数据存储于栈内存;引用类型存储于堆内存
二:原始类型值不可更改; 引用类型值是可更改的,(引用类型变量存放的是堆地址,堆地址里面存放值)
三:原始类型值相等就是相等的;两个变量是引用类型必须是对同一个值的引用(相当于引用这个值得地址),两个变量才相等;(也就是堆地址相同,变量就相同)
九对象和原始数据类型的length值不可更改;