数据类型/流程控制/数组/对象/字符串

var age=16;
var name='zhangsan';
int age=18;
age='abc';

数据类型有:number/boolean/string/undefined/function/object
判断一个变量是不是数字:
isNaN    is not a number
var a=5;
所以 isNaN(5);   返回是false
转换成字符串类型:
1、使用xxx.toString()方法
var num=18;
var isRight=true;
console.log(typeof(num.toString()));
console.log(typeof(isRight.toString()));  

null没有toString方法,undefined也没有toString方法
2、但可以用String(null);

3、可以通过与空字符串拼接+""的方式
var num=18;
var isRight=true;
console.log(typeof (num+'')); 
console.log(typeof (isRight+'')); 
转换成数值类型:
1、通过Number()进行转换
转换true就是1   转换'123'就是123   转换'sjdfl'就是Nan  not a Number

2、parseInt()
使用parseInt无法将布尔类型转换成数值类型 返回的结果是NaN
转换字符串'123abc'会从头转换数字直到遇到其他终止 输出123

3、parseFloat()
和parseInt类似,遇到第一个.会解析,但当遇到第二个.或者其他内容的时候就结束
parseFloat('1253.4.6dsfeg')
1253.4
如果解析字符串中只有整数,那就返回整数

5、取整数或者取负数
var num='12546'
console.log(+num)  也可以与0相减
转换成布尔类型:
1、Boolean()
var str='abc';
var num=123;
var a=null;
var b;
Boolean(str)    //true
Boolean(num) //true
Boolean(a)   //false
Boolean(b)   //false
转换成false的情况:null undefined '' 0 NaN
var result='55'==55      //true
var result='55'===55     //false
var result=55===55       //true
与或非
&&   ||    |
关系运算符
<  >   >==  <=  == !=  ===  !==
优先级从高到低:
1、() 优先级最高
2、一元运算符  ++ -- !
3、算数运算符  先乘除 %  后加减
4、关系运算符  > >= < <=
5、相等运算符 == != === !==
6、逻辑运算符  先&& 后||
7、赋值运算符
三元运算符
1 表达式1?表达式2:表达式3
2 是对if...else的一种简化写法
这里的数组其实类似于python中的list,里面可以存储不同的数据类型
但是不推荐
var names=[15,'cat',true,666]

使用.length可以获取数组长度
获取数组第一个元素和最后一个元素
names[0]   names[names.length-1]

可以先定义一个空数组,然后循环将对应索引位置赋值,这里不同于python,python不可以
var scores=[];
for(var i=0;i<10;i++){
  scores[i]=i;
}
清空数组,可以使用scores.length=0


其他方法:
Array.map()
此方法是将数组中的每个元素调用一个提供的函数,结果作为一个新的数组返回,并没有改变原来的数组
let arr = [1, 2, 3, 4, 5]
let newArr = arr.map(x => x*2)
//arr= [1, 2, 3, 4, 5]   原数组保持不变
//newArr = [2, 4, 6, 8, 10] 返回新数组
  

Array.forEach()
此方法是将数组中的每个元素执行传进提供的函数  注意和map方法区分 也不会改变原数组
let arr = [1, 2, 3, 4, 5]
arr.forEach(x => console.log(x*2) )
 

Array.filter()
此方法是将所有元素进行判断,将满足条件的元素作为一个新的数组返回
let arr = [1, 2, 3, 4, 5]
    const isBigEnough = value => value >= 3
    let newArr = arr.filter(isBigEnough )
    //newNum = [3, 4, 5] 满足条件的元素返回为一个新的数组
  

Array.every()
此方法是将所有元素进行判断返回一个布尔值,如果所有元素都满足判断条件,则返回true,否则为false:
let arr = [1, 2, 3, 4, 5]
    const isLessThan4 = value => value < 4
    const isLessThan6 = value => value < 6
    arr.every(isLessThan4 ) //false
    arr.every(isLessThan6 ) //true
  

Array.some()
此方法是将所有元素进行判断返回一个布尔值,如果存在元素都满足判断条件,则返回true,若所有元素都不满足判断条件,则返回false:
let arr= [1, 2, 3, 4, 5]
    const isLessThan4 = value => value < 4
    const isLessThan6 = value => value > 6
    arr.some(isLessThan4 ) //true
    arr.some(isLessThan6 ) //false
  

Array.reduce()
此方法是所有元素调用返回函数,返回值为最后结果,传入的值必须是函数类型:
let arr = [1, 2, 3, 4, 5]
   const add = (a, b) => a + b
   let sum = arr.reduce(add)
   //sum = 15  相当于累加的效果
   与之相对应的还有一个 Array.reduceRight() 方法,区别是这个是从右向左操作的
  

Array.push()
此方法是在数组的后面添加新加元素,此方法改变了数组的长度:
   
Array.pop()
此方法在数组后面删除最后一个元素,并返回该元素,此方法改变了数组的长度:
let arr = [1, 2, 3, 4, 5]
    arr.pop()
    console.log(arr) //[1, 2, 3, 4]
    console.log(arr.length) //4
  

Array.shift()
此方法在数组后面删除第一个元素,并返回该元素,此方法改变了数组的长度:
let arr = [1, 2, 3, 4, 5]
    arr.shift()
    console.log(arr) //[2, 3, 4, 5]
    console.log(arr.length) //4 
  

Array.unshift()
此方法是将一个或多个元素添加到数组的开头,并返回新数组的长度:
let arr = [1, 2, 3, 4, 5]
    arr.unshift(6, 7)
    console.log(arr) //[6, 7, 2, 3, 4, 5]
    console.log(arr.length) //7 
  

Array.isArray()
 判断一个对象是不是数组,返回的是布尔值
 
Array.concat()
 此方法是一个可以将多个数组拼接成一个数组:
let arr1 = [1, 2, 3]
      arr2 = [4, 5]
  let arr = arr1.concat(arr2)
  console.log(arr)//[1, 2, 3, 4, 5]
  

Array.toString()
 此方法将数组转化为字符串:
let arr = [1, 2, 3, 4, 5];
   let str = arr.toString()
   console.log(str)// 1,2,3,4,5
  

Array.join()
 此方法也是将数组转化为字符串:
let arr = [1, 2, 3, 4, 5];
let str1 = arr.join('')
let str2 = arr.join(',')
let str3 = arr.join('##')
console.log(str1)// 12345
console.log(str2)// 1,2,3,4,5
console.log(str3)// 1##2##3##4##5
  

通过例子可以看出和toString的区别,可以设置元素之间的间隔~ 


Array.splice(开始位置, 删除的个数,元素)
万能方法,可以实现增删改:
let arr = [1, 2, 3, 4, 5];
     arr.splice(2, 0 'haha')
     console.log(arr) //[1, 2, 'haha', 3, 4, 5]新增一个元素
     arr.splice(2, 3)
     console.log(arr) //[1, 2] 删除三个元素
     arr.splice(2, 1 'haha')
     console.log(arr) //[1, 2, 'haha', 4, 5] 替换一个元素
     
    

reverse()反转数组
sort()排序
slice()从当前数组中截取一个新的数组
indexOf() 找元素索引  只找到第一个元素位置
lastIndexOf() 返回找到的最后一个元素位置

let和const是ES6后新加的元素,能限制变量为局部作用,防止变量提升

x=>x*7 类似于 python中的匿名表达式 lambda x:x+7

对象:
如何创建对象,如何使用对象的成员。
1、创建一个对象
var xiaobai={
	name:'xiaobai',
	type:'dog',
	age:2,
	bark:function(){
		console.log('wang');
	}
}
xiaobai.name;
xiaobai.bark();
xiaobai['name'];
属于对象的函数叫做方法

2、new Object()
var hero=new Object();
hero.name='xiaowang';
hero.hit=function(){
	console.log(this.name+'ha');
};
hero.hit()

3、创建多个对象1
function createHero(name,weapon,equipment,blood) {
	var hero=new Object();
	hero.name=name;
	hero.weapon=weapon;
	hero.equipment=equipment;
	hero.blood=blood;

	hero.attack=function() {
		console.log('拿起了大刀砍了上去');
	}
	return hero
}

var laodiao=createHero('小刘','宝剑',['头盔','布衣'],100);
console.log(laodiao.name);

4、创建多个对象(自己构建)
function Hero(name,weapon,equipment,blood) {
	this.name=name;
	this.weapon=weapon;
	this.equipment=equipment;
	this.blood=blood;

	this.attack=function() {
		console.log('拿起了大刀砍了上去');
	}
}

var laodiao=new Hero('小刘','宝剑',['头盔','布衣'],100);
console.log(laodiao.name);


遍历对象
for (var item in object){
    console.log(item,object[item]);
}

删除属性
delete object.name
内置对象
JavaScript包括:ECMAScript  DOM   BOM
JavaScript中的对象有三种,自定义对象,内置对象,浏览器对象
ECMAScript中的对象有两种,自定义对象,内置对象
Math/Array/Date  
Math.random()  Math.max()  Math.min()  Math.floor()  Math.ceil()
数组过滤
let arr = [1500,1200,2000,2100,1800];
var new_arr=arr.filter(x=>x>=1500);
console.log(new_arr);
找元素,找到所有的位置
let arr = [1500,1200,2000,1500,1800];
console.log(arr.indexOf(1500,0));  //0   从0位置开始找
console.log(arr.indexOf(1500,1));  //3   找到就返回索引
console.log(arr.indexOf(1500,2));  //3
console.log(arr.indexOf(1500,3));  //3
console.log(arr.indexOf(1500,4));  //-1  没找到,返回-1

var index=-1;
do{
  index=arr.indexOf(1500,index+1);
  if (index!=-1) {
     console.log(index);
  }
}while(index !== -1);
字符串的特点
字符串有不可变性,
var s='abc';   s='xxxyyyyy';
不能修改原来的'abc'而是重新开辟空间'xxxxxyyyyy'
通过垃圾回收回收'abc',不一定什么时候回收,因此
当拼接大量字符串的时候会有性能问题。
简单类型会使用包装类型的方法,
常用字符串方法:
1、字符方法
charAt()    //获取指定位置处的字符
charCodeAt() //获取指定位置处字符的ASCII码
str[0]      //H5 , IE8+支持  和charAt()等效
2、字符串操作方法
concat()   //拼接字符串,等效于+.+
slice()  或  substring()   截取
substr()  从start位置开始,截取length个字符
3、位置方法
indexOf()
lastIndexOf()   这俩与数组的类似
4、去除空白
trim()   //只能去除字符串前后的空白
5、大小写转换
to(locale)UpperCase()   //转换大写
to(locale)LowerCase()   //转换小写
6、其他
search()
replace()
split()

发表评论

邮箱地址不会被公开。 必填项已用*标注