js基础知识(2)

js基础知识

判断语句

三个判断:

	if    else
	三元运算符
	switch    case
if else
如果括号中只有一个值,默认转布尔值
如果在对象中,属性名不存在,那么获取的属性值永远是undefined
if(3){
        console.log(100);
}else{
        console.log(200);
}
//3-->true    100
let obj = {name:'sx'}
if(obj.sex){
        console.log(100);
}else{
        console.log(200)
}
//obj.sex-->undefined   undefined-->false           200
括号里是 两个值作 == 判断
if( ({}) == [] ){
        console.log(100)
}else{
        console.log(200)
}
//对象与对象做==比较,空间不同    false    200
if(1){
   //1成立执行的代码,如果成立,下面都不执行
}else if(2){
    //2成立执行的代码,如果成立,下面都不执行
}else if(3){
    //3成立执行的代码,如果成立,下面都不执行
}else{
    //都不成立执行的代码
}
三元运算符(只适合简单的判断)
条件?条件成立执行的代码:不成立执行的代码
?:必须成对出现
if([] == false){
        console.log(100);
}else{
        console.log(200);
}
[] == false?console.log(100):console.log(200);
//三元运算符嵌套判断:
[] == false?( ![]==true?console.log(100):console.log(200) ):console.log(200);
switch case
num  和case后面的值会进行绝对比较
switch中,让小括号中的值和case后面的值进行绝对比较
let num = 100;
switch(num){
        case"100":
        console.log(100);该条件成立时执行的代码;
      break;
    case"100px":
        console.log(100);
  default:
        break;//中断代码执行
        console.log(500);
}

元素

	在html中叫标签,在js中叫元素;
	js中的元素都是对象数据类型的
	要想操作谁,就要先获取谁。
document.getElementById
document:    上下文文本
get:    获取
Element:    元素
By:    通过
Id:    id名
document.getElementsByTagName()
在document文本下通过标签名获取元素
document   上下文文本
get             获取
Element      元素
By              通过
Tag             标签
Name            名字
let div1 = document.getElementById('box');
div1.style.background="black"
div.onclick = function(){
    //这里面的代码不运行,当点击元素的时候,这个函数就会执行;
        div1.style.background="black"
}
div.onclick = function(){
        if(div1.style.background==='black'){
            div1.style.background="red"
    }else{
            div1.style.background="black"
    }
}

循环

三个循环

for 循环
	for 循环(四部曲)
		初始化一个变量    i=0
		判断条件是否成立
		执行循环体(大括号里面的内容)
		执行    i++
let arr = [100,2,5,5,2,4];
//用循环拿到数组的每一项
for(let i=0;i<arr.length;i++){
        console.log(i);
}


i++
在自身基础上+1
先取值,再运算
++i   先运算,再取值
以上运算符号做的运算,结果一定是number类型
i+=1:可以理解为++i
i-=1:可以理解为--i
let a = 10;
let b = a++;
console.log(b)  // 10
console.log(a)  // 11
let b = ++a;
console.log(b)  // 11
for(let i=0;i<6;i++){
        console.log(100)            //输出6次
}
for(let i=0;i<6;i++){
        console.log(100);           //输出一次
    break;                              //终止for循环,终止的是整个for循环
}
for(let i=0;i<6;i++){
        console.log(100);           
    continue;                               //终止本轮循环,continue下面的代码不执行;不终止整个循环
    console.log(200);           //不输出
}
for in 循环:
let arr = {name:'zhufeng',age:10,4:9,1:3};
for(let key in obj){
        console.log(key)        //1  4  zhufeng  10
    //会把对象中属性名是数字的先输出,并且按照从小到大的顺序输出
    console.log(obj.[key])  // 'zhufeng'  10
    // key是变量,代表的是字符串'name'    第一次循环
    // 所以不能用   obj.key方法   也不能['key'],就不是变量而是字符串了。
}
while 循环
当不知道循环多少次时,会使用到while循环;
while    阻塞线程;
let i =3;
while(i<6){
        i++;
    console.log(100)
}
console.log(i)          //  6

逻辑且:&& 逻辑或:||

逻辑且:&&
	如果前边转布尔是true,就取后边的,反之,就取前边的
	let num = 1&&2
	console.log(num)//2
	当&&左右两边的语句都为真,则这个逻辑判断为真
	当&&左右两边的语句有一个为假或都为假时,这个逻辑判断为假
	
逻辑或:||
	如果前边转布尔是false,就取后边的,反之就取前边的
	let num = 1||2
	console.log(num)//1
	当||左右两边的语句有一个为真,或都为真时,这个逻辑判断为真
	当||左右两边的语句都为假时,这个逻辑判断为假

代码运行机制,堆栈内存解析

	打开浏览器时
	分配出一块栈内存,为代码提供运行环境(栈内存形成之后,会分成两块,一块是值存储区,一块是变量存储区)
	再分配出一个主线程,执行代码
	代码执行时,代码解析从上到下,依次进行,
	第一句代码进栈,执行完毕后出栈,
	第二句才能进栈
	创建一个变量,变量放到变量存储区,
	此时,如果值是基本数据类型,就放到值存储区。
	如果值是引用数据类型,就开辟一个堆内存,生成一个16进制地址把对象的键值存储进去,把这个16进制的地址返回到值存储区,相互关联,把值赋给变量。

例子1
在这里插入图片描述
例子2:
在这里插入图片描述
列子3:
在这里插入图片描述

数据类型检测

  • typeof

       - 检测数据类型
     	特点:
     		- 返回值是一个字符串
     		- 字符串里放的是他的数据类型
     	缺点:
     		- typeof检测数组、普通对象、null  返回值都是'object',所以typeof检测数据类型,无法将null、数组、普通对象细分
    
typeof null    返回值是'object'
typeof []        返回值是'object'
typeof ({})     返回值是'object'
console.log(typeof 11)//'number'
console.log(typeof '121')//'string'
console.log(typeof undefined)//'undefined'
console.log(typeof true)//'boolean'
console.log(typeof null)//'object'
console.log(typeof [])//'object'
console.log(typeof ({}))//'object'
console.log(typeof typeof typeof 12)//'string'

instanceof

检测当前实例是否属于某个类
		- 它是检测当前实例是否属于某个类,属于为true,不属于为false
  		- 写法:实例instanceof类 
       	-  局限性:instanceof不能检测基本数据类型,只能检测引用数据类型的值  检测基本数据类型检测不了只能为false

constructor

基于构造函数检测数据类型
		-   constructor 检测类 有为true 没有为false
    应用方法:
   		-  1.不能把类的原型重定向
  		-  2.不能再私有属性上加constructor

Object.prototype.toString.call()

检测数据类型最好的方式
发布了17 篇原创文章 · 获赞 23 · 访问量 382

猜你喜欢

转载自blog.csdn.net/wang_js_amateyr/article/details/103291070