前端学习JavaScript笔记

JavaScript

javascript是ECMAScript规范的一种实现
javascript是一种弱类型脚本语言,所谓的弱类型是指定义变量时,不需要什么类型,在程序运行过程中会自动判断类型。

数据类型

ECMAScript中定义了6种类型(5种基本类型+1种复杂类型)
  • Undefined
  • Null
  • Boolean
  • Number
  • String
  • Object

Undefined
该类型只有一个值 undefined,使用var 声明变量但未对其初始化时,这个变量的数值就是undefined
Null

该类型只有一个值 null,空对象的指针,而这也正是使用 typeof操作符检测null值会返回object的原因
应用:
如果定义的变量准备用来保存对象,那么最好将其初始化为null值而不是其他值,这样一来,只要检查null值就知道相应的变量是否已经保存了一个对象的引用

var car = null;
if(car != null{
...
}
Number
NaN
NaN 即非数值(not a number)是一个特殊的数值,用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出异常了),例如,任何数0除以返回NaN,不会影响其他代码的执行 NaN 两个特点
  1. 任何涉及NaN操作返回都是NaN
  2. NaN与任何值不相等,包括NaN

typeof 操作符

鉴于ECMAScript是松散型的,故需要一种手段检测数值类型—typeof
注意:

 - typeof null   结果是object
 - typeof [1,2]  结果是object,不是array 所以引用类型除了function都是object

instanceof

用于实例和构造函数的对应关系,例如判断一个变量是否为数组时,typeof无法判断,但是可以使用
[1,2] instanceof Array 来判断,因为数组的构造函数就是Array。
例如

 function Foo(name){
 this.name = name
 }
 var foo = new Foo('bridge');
 console.log(foo instanceof Foo)//true

值类型VS引用类型

javascript根据变量的传递方式,又分为值类型(Boolean,String,Number,Undefined,Null)和引用类型(包括了Object类的所有,如Date,Array,Function等)
值类型的值是存储在栈内存
引用数据类型的值是保存在堆内存中的对象,值大小不固定,栈内存中存放指向堆内存中的对象的指针


原型和原型链

Javascript是基于原型的语言,如何理解Javascript的原型?
通过记忆以下几个要点来理解

  • 所有引用的类型(数组,对象,函数),都具有对象特性,即可以自由拓展属性
  • 所有引用类型(数组,对象,函数),都有一个_proto__属性,指向所属类的prototype
内存问题

栈内存 当代码运行到栈内变量的作用域以外时候,变量被摧毁,并且堆中的引用计数 - 1

而当原本指向的为引用变量的变量被重新赋值,修改为其他值或者引用变量,引用计数也会 - 1

堆内存中的对象,有一个引用计数
GC垃圾收集,内存回收机制 GC的时间,第一,堆内存达到一定使用门槛,第二,定期
将引用数为0的摧毁

运算符
  • ==相等——先转换再比较
  • ===全等——仅比较不转换


在这里插入图片描述
在这里插入图片描述

类型转换
转化为数值
  • parseInt(parseFloat)Number的区别比较
  • parseInt(“100px”);看上去像数字,数字开头参杂其他
  • Number(true)本质上可以转化为数字true false null
  • 都不可以,undefined,字母开头

转化为字符串
  • String()
  • .toString()

转化为bolean
  • !隐性转换
  • Bolean()

循环

for循环最常用的地方是利用索引来遍历数组
例如:

var arr = ['Baidu', 'Alibaba', 'Tencent'];
var i, x;
for (i=0; i<arr.length; i++) {
    x = arr[i];
    console.log(x);
}

for-in可以用来枚举对象的属性
例如:

var object = {
    name: 'Jack',
    age: 20,
    city: 'Beijing'
};
for(var key in object){
console.log(key)//'name', 'age', 'city'
}


数组

push pop unshift shift

  • 清空数组的三种方法

  • 1.length arr.length=0;

  • 2.splice arr.splice(0);

  • 3.[] arr=[]


对象
  • 创建对象

    var obj1 = {};
    var obj2 = new Object();
    
  • 对象的属性可以为函数 ps.使用[]访问对象里的方法 ex.obj['function']();

  • 对象中的属性名必须是符合变量名命名规则,含有特殊符号,如“ ” , "-" 需要用字符串表示

  • 分隔开每一对key-value,最后一对 不需要在末尾加,如果加了,有的浏览器(如低版本的IE)将报错。

  • 访问属性 点表示法 方括号表示法

  • 使用变量来访问,或者属性名包含会导致语法错误,[ ]里面传入的是字符串 ,使用方括号表示法


查询属性是否存在

  • obj.hasOwnProperty('key')
  • 'key' in obj


    删除属性
  • delete obj.key


    修改属性
  • obj.key=value1

构造函数
包装类
  • 三种特殊的引用类型 Boolean Number String
  • 基本类型存在一些的特殊行为,
var s1 = 'some text'  
var s2 = s1.substring(2)

实际上 在读取一个基本类型值,后台就会创建一个对应的基本包装类型对象,从而使得我们能够调用一些方法来操作这些数据

预编译
先扫描后运行

脚本中所有的 变量和函数声明都在预编译完成,与变量声明实际书写的位置无关

在这里插入图片描述
变量声明(var) 没有var的变量都为window的全局变量不参与预编译
函数声明 function 函数名(){} 函数表达式function(){}

注意,脚本中如果变量名和函数名相同,函数会将变量覆盖。相同函数名,后面的函数会覆盖前面的函数,忽略参数


函数预编译
在这里插入图片描述

var scope = 'global';
function f(){
console.log(scope);//undefined
var scope = 'local';
console.log(scope);//local
}
console.log(scope);//global
f();
JS作用域

JS作用域都是属于函数级别的,不同于java ,c的块级别 { }部分

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
https://blog.csdn.net/jnshu_it/article/details/77915624
在这里插入图片描述
正则表达式
/\d+/g
\s \S

产生特定范围内随机数字 Math.floor(Math.random()*(maxNum-minNum+1))+minNum

构造函数

私有属性

map
在这里插入图片描述
filter

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
return 位置放for外面
substring(start,stop)

var arr = str.replace(/\s+/g, “”);

DOM 操作中注意获取到value的内容多为字符串

BOM
出于安全的考量,js只能对新开的window进行操作

  • alert
  • prompt
  • confirm
  • open
  • close
  • moveTo
  • resizeTo
Prototype

Prototype特点
  • 凡是函数都有prototype属性
  • 凡是函数构造的对象,都有属性__proto__
  • prototype, __proto__指向同一对象
Prototype作用
  • 生成的对象具有prototype的属性和方法
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值