2null和undefined,控制台调试方式,栈、堆内存

一、null和undefined的区别

  • null表示“没有对象”,即该处不应该有值(未声明–没坑),undefined表示“缺少值”,就是此处应该有一个值,但是还没有定义(声明但未赋值–占坑不用);
  • null指的是null对象指针
// null 和undefined的区别
// null是意料之内的空(未声明--没坑),undefined是意料之外的空(声明未赋值--占坑不用)
// null指的是null对象指针
typeof null; ==>"object"

// 1、变量只是声明了,但没定义(赋值)  undefined
var name; 
console.log(name); 

// 2、想要获取对象中的属性值,里面没有对应的属性   undefined
var obj = {name:"lili"}; 
console.log(obj.name); 
console.log(obj.age); 

// 3、函数里面设置了形参,在调用的时候没有传实参, 在函数中打印形参  undefined
function fn (x, y) {

    console.log(x,y);

}
fn(); 

// 4、函数没有return返回值,函数返回值结果就是undefined
function fn1(x, y) {

    return x + y;

}
var res1 = fn1(1, 2); 
console.log(res1); 

function fn2(x, y) {

    var total = x + y;

}
var res = fn2(1, 2); 
console.log(res); 

二、js文件的三种引入方式

<! DOCTYPE html>
<html lang="en">
<head>

    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 第一种
        // window.onload 当页面中所有资源都加载完毕之后再加载
        window.onload = function () {
            var box = document.getElementById("box"); //!!写引号!!
            console.log(box);
        }
    </script>

</head>
<body>

    <div id="box"></div>

</body>
</html>
<script>

    // 第二种
    var box = document.getElementById("box"); //!!写引号!!
    console.log(box);

</script>
// 第三种
<script src="./1null和undefined区别.js"></script>

三、常用的调试方法

  1. 打印
  2. 详细输出!!
  3. alert弹框(弹框的时候,会默认把数据转换为字符串类型)
  4. confirm提示框(有返回值)
  5. prompt带输入框的提示框
// 调试方法
// 1、打印
var name = 0; 
console.log(name); 

// 2、详细输出
var obj = {name:"gggg"}
console.dir(obj); 

// 3、弹出框(默认toString()转换数据为字符串类型)
alert(name); 
alert(obj); 

// 4、confirm提示框
// 返回值:点击确认,返回true;
//        点击取消,返回false。
var res = confirm("你准备好了嘛??"); 
console.log(res); 

// 5、prompt带输入框的提示框
// 返回值:点击确认,返回输入的内容;
//        点击取消,返回null。
var res2 = prompt("你是girl还是boy??"); 
console.log(res2); 

四、获取对象中 属性名对应的属性值

  1. 对象.属性名
  2. 对象[“属性名”]

注意: 在获取的时候,如果对象中没有这个属性,得到的值就是undefined;

如果属性名是数字的话,不能用第一种(会报语法错误),要用第二种。
var obj = {

    name:"aaa",
    age:"12",
    100:"hehe"

}
var name = "zhufeng"; 
// 获取对象 属性名对应的属性值:
// 1、对象. 属性名
// 2、对象["属性名"]
// 如果属性名是数字的话,不能用第一种(会报语法错误),要用第二种。
// 在获取的时候,如果对象中没有这个属性,得到的值就是undefined。。
console.log(obj.name); 
console.log(obj["name"]); // 引号!!!

// console.log(obj.100); 会有语法错误.
console.log(obj[100]); 
// 在获取的时候,如果对象中没有这个属性,得到的值就是undefined。。
console.log(obj.job); 
console.log(obj[name]); // ==>console.log(obj["zhufeng"])==> undefined

五、对象属性的增删改

// 如果里面没有,我直接赋值就是添加,如果原来有,又赋值就是更改
var obj={name:"li", age:13, 100:"he"}; 
// 更改
obj.age=100; 
//===>添加
obj.job="前端开发攻城狮"

//===>删除  属性名还在,只是值变成了null
obj.name=null; ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201111101600814.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzUyNDg5Mw==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201111101600802.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzUyNDg5Mw==,size_16,color_FFFFFF,t_70#pic_center)

// 彻底的删除
 delete obj.age; 
 console.log(obj); 

六、栈、堆内存

1、栈内存
  • 供js代码运行
  • 存储基本数据类型的值
var a =  12; 
var b = a; 
console.log(b); //12
2、堆内存
  • 主要用来存储引用数据类型的值;
  • 如果是对象,存储的是属性名和属性值;
  • 如果是函数,把函数当成字符串存起来。

栈内存 堆内存

var obj1 = {name:"aaa", age:"12"}; 
var obj2 = obj1; 
obj2.age = 18; 
console.log( `obj1.age ${obj1.age}` ); // 18
var obj = {

    name:"aaa",
    a:"10",
    b:obj.a*10

}; 
// 报错:obj里边未找到a (obj在栈内存中,其键值对在堆内存中)
console.log(obj.b); 

    b:obj.a*10
          ^

TypeError: Cannot read property 'a' of undefined

在这里插入图片描述

七、if语句

  • 逻辑运算符号
    • 且:&& 符号左右两边的表达式都必须成立;
    • 或:|| 只要符号左右两边有一个条件成立。
    • 如果是单独的一个值,先把它转换成布尔类型,如果是真,条件 成立,如果假,条件不成立。
var num=3; 
// 单独的一个if
// if(num>0){
//   alert("你们真棒!")
// }
// if else

// if(num>5){
//     alert("棒棒哒")
// }else{
//    alert("萌萌哒") 
// }

// if(num<0){
//   alert("负数")
// }else if(num==0){
//   alert(0)
// }else if(num>0 && num<5){
//    alert("休息一下吧")
// }else{
//     alert("哈哈")
// }
/* 
  逻辑运算符号:
  表示且:&&  也就是符号左右两边的表达式都必须成立
  表示或:||  只要这个符号左右两边只要有一个成立就可以进入执行体里面

*/

if([]){
  console.log(111); 
}

// if(num>0){
//   if(num<5){
//     alert("0-5"); 
//   }
// }
// var score=60; 
// if(score>=60 && scrore<=80){
//   alert("有效")
// }

var flag=2; 
if(flag==0 || flag==2){

    console.log("heheh")

   alert("heihei"); 
}

if(2==2){
   alert(1); 
}

八、三元运算符

语法:条件 ? 成立的执行语句 : 不成立的执行语句
注意:如果执行体里面有多条语句,用小括号包起来,并且语句和语句之间用逗号隔开

var num = 2; 
num>5 ? num++ : num--; 
num>5 ? num++ : (num--, console.log(num)); 
// console.log(num); 

var num1 = 1; 
if (num1<2) {

    num1 += 2;

}
// 如果只有一个if判断,写三元运算语句时,有三种写法:
num1<2 ? num1 += 2 : void 0; 
num1>2 ? num1 += 2 : null; 
num1>2 ? num1 += 2 : undefined; 
console.log(num1); 

九、switch case 语句

switch case 语句的语法:

switch (表达式) {
    case n:
        代码块;
        break;
    case n:
        代码块;
        break;
    default:
        默认执行的代码块;
}
  • == 如果数据类型不同,会先转换为相同的数据类型,再进行比较
  • === 绝对比较,数据类型和值都必须相等
  • switch case语句里边就是绝对比较(===)
  • if else 语句里边(==)
  • if条件语句里边只要有一个符合条件就会执行这个,剩下的不会再执行(即使符合条件)
// 举个栗子
var num = 5;
switch (num) {
    case 5:
        num ++;
        break;
    case 6:
        num --;
        break;
    // 上边的几种情况都不成立,就走默认的这个语句
    default:
        num = 0;
}
console.log(num);

十、检测数据类型的方法

  1. typeof    返回值一定是字符串类型
    • “string”
    • “number”
    • “boolean”
    • “undefined”
    • “object”
    • “function”
      特殊记忆:typeof null;==>“object”
  2. instanceof
  3. constructor
  4. Object.prototype.toString.call();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值