javascript基础知识总结

本文深入讲解JavaScript的基础知识点,包括JS的组成、数据类型、对象操作、逻辑控制等内容,并附带典型面试题解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

javaScript基础知识总结

不涉及闭包、原型链、面向对象等

JS的组成

  • DOM: Document Obejct Model 文档对象模型 提供了一整套操作页面元素的API
  • BOM: Browser Object Model 浏览器对象模型 提供了一整套操作浏览器相关信息的API
  • ECMAScript JS的语言标准规范

JS中的数据类型

基本数据类型
  1. string
  2. numeber
  3. boolean
引用数据类型
  1. Object
  2. function
  3. Array
  4. Data
  5. Math
  6. String
  7. Number
  8. Boolean
  9. RegExp
空数据类型
  1. null
  2. undefined
    //注意: null == undefined 会返回true
获取数据类型的方式

    typeof 数据 返回字符串类型

    instanceof 某对象 返回truefalse

    Object.prototype.toString.call(obj) 返回对象类型
  1. 使用typeof获取到除了function之外的所有的引用类型的数据的类型都是object

2。 使用typeof获取null的数据类型,获取到的是object

in关键字

  1. for-in 遍历对象的属性

    for(var k in obj){

        console.log k;          //获取对象属性
        console.log obj[key]    //获取对象属性值
    }
  1. 属性名 in 对象 判断对象能否访问某个属性 返回值为布尔值;

delete关键字

  1. 删除没有使用var声明的变量

    a = 10;
   console.log(delete a);
   // 会报错
  1. 删除对象的属性

     var obj = {
         obj.name = 'jack',
         obj.age = '18'
     }

     delete obj.name;
     console.log(obj);

逻辑中断

  1. ||中断

    表达式1 || 表达式2

    如果表达式1为真,则返回表达式1,否则返回表达式2
  1. &&中断

    表达式1 && 表达式2

    如果表达式1为假,则返回表达式1,否则返回表达式2 

break continue

  1. break跳出整个循环,继续执行循环之后的代码
  2. continue跳出本次循环,继续下次循环

对象的动态特性

在对象创建完成之后,可以随时的为对象新增成员,这样的特性是动态特性
1. 点语法
js
对象名.属性名 = 值

2.关联数组语法

    对象名[属性名] = 值

值类型和引用类型

值类型

直接存储数据本身的的数据就是值类型的数据

引用类型

存储的是数据的地址,数据单独存储起来的数据就是 引用类型的数据

值类型的赋值特征

直接将存储的数据复制一份交给新的变量,两个变量值相同,但是存储空间不同,相互独立,互不影响

引用类型的复制特征

直接将数据的地址复制一份交给新的变量,两个bianl指向同一个对象,修改其中一个,另外一个也会受到影响

异常处理

    try{

        可能会出错的代码
    }catch(e){
        出后的处理代码
        //e 异常信息
    }finally{
        //无论是否出错都会执行的代码
        //一般用来做释放资源的操作
    }

    手动抛出异常的语句 throw

    throw anything (anything可以是任何类型的数据)
    // throw出去的东西就是被catch捕获的 通过参数e传给我们

浅拷贝和深拷贝

浅拷贝
    var obj = {
        name : "jack",
        age : 18,
        car : {
            car : "大黄蜂"
        }
    }

    var obj1 = {}
    for (var k in obj) {

        obj1[k] = obj[k]

    }


    /*
    *
    *    经过对象遍历赋值后,obj1的第一层键值对完全和obj的键值对相等,但是obj1中的car和obj中的car指向的是同一个对象,修改obj1中的car对象的值,对应的obj中的car对象的值也会改变 这就是浅拷贝
    */
深拷贝

 var obj = {
        name : "jack",
        age : 18,
        car : {
            car : "大黄蜂"
        }
    }

var obj1 = JSON.parse(JSON.toStringify(obj));
//上面大概的实现原理是 先将obj里的数据全部转换成字符串,然后再通过parse方法转换成对象,此时obj中的car对象也会被重新创建一份,
// 所以obj中的car 和obj1中的car不再是指向同一个car ,这时修改其中一个,另一个也不会发生变化,这时深拷贝

分享一些面试题

数据类型测试

  1. 判断代码输出结果
var test = 2;
console.log("test is a Number--" + (test.constructor == Number));
function test1() {};
var t1 = new test1();
var test2 = "37degree";

console.info("typeof test--" + typeof test);
console.info("typeof test1--" + typeof test1);
console.info("typeof t1--" + typeof t1);
console.info("t1 instanceof test1--" + (t1 instanceof Object));
console.info("test instanceof Array--" + (test instanceof Array));

参考答案

test is a Number -- true
typeof test -- number
typeof test1 -- function
typeof t1 -- object
t1 instanceof test1 -- true
test instanceof Array -- false

分析:

首先涉及到 JS 预解析的概念,这里的 变量申明 和 函数申明 都会被预解析处理,知道这个以后,那么下面一个一个来分析:

第一个:
因为 test = 2 先执行了,所以这里 test 的值已经是一个数字了,那么 test.constructr 就是 Number,所以下面这个打印 true;
console.log("test is a Number--" + (test.constructr == Number))

第二个:
原因同上,需要注意 typeof 得到的结果 number 的 n 是小写的!

第三个:
test1 是一个函数,typeof 值为 function;

第四个:
通过 new 得到的结果一定是一个 Object,所以 t1typeof 结果为 object;

第五个:
这个题有点误导人的,首先出题人写的是 instanceof test1,但真正计算的却是 instanceof Object,请注意它们的差异!不过不影响结果的,结果都是 true;

第六个:
test 是一个数字,所以他的构造函数应是 Number,而不是 Array,所以结果为 false
  1. 请写出以下运算结果:
alert(typeof null);
alert(typeof undefined);
alert(typeof NaN);
alert(NaN == undefined);
alert(NaN == NaN);
var str = "123abc";
alert(typeof str++);
alert(str);

它们输出的结果依次是:

alert(typeof null);  // object
alert(typeof undefined);  // undefined
alert(typeof NaN);  // number
alert(NaN == undefined);  // false
alert(NaN == NaN);  // false
var str = "123abc";
alert(typeof str++);  // number
alert(str);  // NaN
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值