Js基础小结

Js的组成:

  • DOM: Document Object Model,文档对象模型,为我们操作页面元素提供了一套方法(API) ;
  • BOM: Broswer Object Model,浏览器对象模型;
  • ECMAScript : 规定JS的核心语法。JS语句,关键字,循环结构,分支结构等。

Js 数据类型:

  • 基本(简单)数据类型:
    • string 字符串
    • number 数值(整数和小数)
    • boolean 布尔(true | false)
    • undefined 未定义
    • null 空
  • 复杂(复合)数据类型:
    • Object
    • Array 数组
    • Date 日期
    • Function 函数
    • String 字符串对象
    • Number
    • Boolean

判断数据类型方式:
关键字:typeof
语法:typeof 数据(变量)
返回值 :字符串类型

Js运算符

分类:算数运算符,关系运算符,逻辑运算符

  1. 算数运算符:
    +(加法),-(减法),*(乘法),/(除法),%(取余),+=(等号左边的值先和等号右边的值进行相加运算在赋值给等号左侧的变量),-=(类似+=)。
    ++自增(--自减类似)
  • 变量前(++a),在执行这句的时候a的值已经增加1.
var a = 3;
var b = ++a *2;
b的值为:8;
  • 变量后(a++),在执行这句话后a的值才增加1,也就是说在a++出现的地方,不会对a的值造成影响。
var a = 3;
var b = a++ *2;
var c = a+1;
b的值为:6;
a的值为:5;

算数运算符的优先级:先加减后乘除,可以利用()来改变运算顺序。

  1. 关系运算符:用来比较两个数值的关系,返回值为布尔值(true | false),用于条件判断。
< 小于
>大于
<= 小于等于
>= 大于等于
==等于
!=不等于
===全等于

等于和全等于
赋值: =
等于: == 判断等号两边是否相等,只判断值是否相等;
全等于: === 判断等号两边是否相等,除了判断值是否相等,还需要判断两边的类型是否一样。

  console.log(null == undefined); // true
  console.log(null === undefined);// false

null 和 undefined有什么区别?
一般情况下,变量的值永远不会为null, 除非手动设置为 null。已经声明未赋值的则为undefined。当告知系统不再使用这个变量的时候,可以回收这个变量所占用的内存空间。
注意点:1.如果被比较的对象不是数值类型,编译器会先尝试进行转换为数值类型,如果不能转换,则报NaN错误;2.关系运算符不能连续使用。

  1. 逻辑运算符(短路运算符)
  • 逻辑非 : 取反
    语法: ! 表达式
    结果: 布尔类型, true | false
  • 逻辑或: ||
    语法: 表达式1 || 表达式2
    结果: 不是布尔类型的
    如果表达式1为真,返回表达式1
    如果表达式1为假,返回表达式2
  • 逻辑与: &&
    语法: 表达式1 && 表达式2
    结果: 不是布尔类型的
    如果表达式1为假,返回表达式1,
    如果表达式1为真,返回表达式2。
    注意点:尽管 && 和 || 运算符能够在非Boolean环境中使用, 但如果他们的返回值能够转换成Boolean值的话,也可以认为是Boolean运算.

值类型和引用类型

  • 值类型:
  1. 字符类型:使用单引号或者双引号进行包裹的值,例如:"adg",'adg'。
  2. 数字类型:直接使用数字进行表示的值:1,2,3,4。
  3. 布尔类型:只能用来表示真假的一个数据类型,用true表示真,false表示假。
  4. 对象类型:Object,一种特殊的数据类型,可以拥有自己的属性和方法。
    例如一个人,是一个对象,他又自己的名字属性,年龄属性,和其他一些功能。
  5. 未定义类型:undefined,凡是没有初始化值的变量或者系统不能够识别的值类型都会设置为undefined。

判断一个数值的类型可以通过方法typeof获得。

  • 引用类型:Object Array Function Date..
    区别:存储的信息不一样。值类型存储的是具体的数据,引用类型存储的是引用(地址),该地址指向具体的内存空间,这一块内存空间中存储着具体的数据。

Js赋值:

内部实现:将等号右边存储的信息复制一份给左边。

  • 值类型的赋值:把右边存储的信息(具体的数据)复制一份给左边。只是简单的数据复制,相互独立,修改其中一个的数值,不会影响另外一个的数值。
  • 引用类型的赋值:把右边存储的信息(指向具体数据的地址)复制一份给左边,共享同一份数据,修改其中一个对象的属性值会影响另外一个。
  • 值类型作为函数的参数:实参和形参是相互独立的,没有影响(值传递);
  • 引用类型作为函数的参数:实参和形参共享同一份数据,修改其中一个对象属性的值会影响另一个(地址传递)
对象的动态特性:可以对对象做一些操作 增加/修改/删除

访问对象的属性:

  • 点语法:obj.name = 'zs',如果设置的属性不存在,则是进行添加操作,如果已经存在则是修改操作。
  • [ ]方括号语法:obj['name ']= 'zs',
  • 使用new 创建对象:var obj = new Object(); //--> {}

in关键字的作用:

  • for in 可以用于遍历对象的属性;


  • 判断对象中是否存在指定的属性。


  • in在数组中的使用:



    如何判断数组中是否有某个元素?

  1. for 循环,有值则返回;
for (var i = 0; i < arr.length; i++) {
        if(arr[i] == 9){

        }
    }
  1. indexof: 如果存在该元素就返回该元素的索引,如果不存在返回-1。
console.log(arr.indexOf(10));//-1

delete关键字的作用:

  1. 可以删除对象中的属性;


  2. 可以删除未使用var声明的变量;


  3. 不能删除使用var声明的变量;


  4. 可以删除直接定义在window上的属性;


特点:

  1. 有返回值,返回值是布尔类型,true表示删除成功;false表示删除失败;
  2. 不能删除使用var声明的变量;
  3. 可以删除直接定义在window上的属性。

循环和分支:

循环:
  1. for 循环:
for (var i = 0; i < 100; i++) {
        // 循环体
    }
  1. for..in循环:
var obj = {};
    for(var key in obj){

    }
  1. while:先判断在执行,有可能一次都不执行循环体.
 var a = 10;
    while (a < 0){
        // 循环体
        a -= 1;
    }
  1. do..whlie:先执行后判断,至少执行一次循环体.
do{
      // 循环体
  }while(a<0);
分支:
  1. if..else


  2. switch.case


异常处理:正常情况下,程序在执行过程中如果出现了错误或者异常,出现错误或异常后面的代码不会执行,有时候我们需要保证及时程序出现了错误或者异常后面的代码也仍然可以执行,这个时候就需要使用异常处理。

结构:

try{
// 可能会出错的代码
}
catch(e){
//  try大括号中的代码出现了错误会执行这个大括号中的代码
        // 获取到出错的原因
        //  需要对错误进行相关的处理
}
finally{
       // 不管有没有出现错误,都会执行这个大括号
        // 在前端开发中不会使用,在后端开发中才会使用(nodejs),一般需要在这里释放一些资源
    }
}

DOM 操作

  1. 创建div标签
var div = document.createElement('div')
  1. 设置样式:
    div.style.backgroundColor = 'red';
    div.style.width = '300px';
    div.style.height = '200px';
    div.style.border = '2px solid #ccc';
  1. 添加元素节点
 document.body.appendChild(div);
  1. 获取新创建的div
var div1 = document.getElementsByTagName('div')[0];
  1. 删除div
document.body.removeChild(div1);

函数的创建:

  1. 声明函数:
function 函数名(形参1,形参2...) {
     // 函数体
   }
  1. 匿名的函数表达式
var func = function () { //匿名函数
        // 函数体
    };
  1. 命名的函数表达式
var func1 = function demo() {
        // 函数体
    }
  1. 使用构造函数
 var func2 = new Function("console.log('func2');");

    func2();

对象的创建:

1.字面量创建对象

  var obj = {name:'zs',age:20};
  1. 使用构造函数
 var obj1 = new Object(); 

Math的常用方法

  • Math.pow(2,7) 2的7次幂
  • Math.round(.6) // 四舍五入
  • Math.ceil(.6) //向上求整
  • Math.floor(.6) // 向下求整
  • Math.abs(-4) // 求绝对值
  • Math.max(x,y,z) // 返回最大值
  • Math.min(x,y,z) // 返回最小值
  • Math.random() //生成一个大于0小于1.0的伪随机数.

数组的常用方法

  • concat();方法参数可以多个数组,按照参数顺序拼接在调用者后-->返回一个新的数组
  • unshift('g');在数组头部添加元素-->返回添加元素后的数组长度
  • shift();在数组头部删除元素-->返回被移除的元素
  • push('g');在数组尾部添加元素-->返回数组长度
  • pop();在数组尾部删除元素-->返回被删除的元素
  • splice(startIndex,deleteCount,insertValue,...);删除指定位置的元素-->返回包含被删除元素的数组
  • join(),join(separatorStr);把数组元素用某个字符串串成一个字符串-->返回拼接后的字符串,对原数组没有影响,没有参数默认为逗号
  • sort();数组中的元素按照ASCII码表中的顺序进行排序,先转为字符串,再进行比较
  • arr.sort(function (a,b) { return a-b; }); 从小到大排列
JS获取元素值的方式
  • style:通过element.style属性只可以获取元素在标签内style属性中的css样式,获取到的属性值是可读并且可写的.
  • getComputedStyle:是一个可以获取当前元素所有最终使用的CSS属性值。返回的是一个CSS样式声明对象([object CSSStyleDeclaration]),只读。尺寸单位是像素.
语法如下:
    var style = window.getComputedStyle("元素", null);    第二个参数通常可以省略,或者填写null,也可以是::before或者::after来获取为元素样式
  • currentStyle:是IE浏览器的一个属性,element.currentStyle返回的是元素当前应用的最终CSS属性值(包括外链CSS文件,页面中嵌入的<style>属性等。
getComputedStyle与style的区别

我们使用element.style也可以获取元素的CSS样式声明对象,但是其与getComputedStyle方法还有有一些差异的。

  • 只读与可读写
    正如上面提到的getComputedStyle方法是只读的,只能获取样式,不能设置;而element.style能读能写,能屈能伸。
  • 获取的对象范围
    getComputedStyle方法获取的是最终应用在元素上的所有CSS属性对象(即使没有CSS代码,也会把默认样式显示出来);而element.style只能获取元素style属性中的CSS样式。因此对于一个光秃秃的元素<p>,getComputedStyle方法返回对象中length属性值(如果有)就是190+, 而element.style就是0。
getComputedStyle与currentStyle的区别

从作用上将,getComputedStyle方法与currentStyle属性走的很近,使用形式上则style与currentStyle走的近。不过,currentStyle属性貌似不支持伪类样式获取,这是与getComputedStyle方法的差异。
例如,我们要获取一个元素的高度,可以类似下面的代码:

element.currentStyle? element.currentStyle : window.getComputedStyle(element, null)).height;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容

  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,208评论 0 3
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,149评论 0 13
  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 3,898评论 0 0
  • 坐在车上我开始有点明白澜珊的意思的了,所谓的没准备好没想好是她真的知道我没有那么做的原因,是我还有一些东西没有想清...
    呼吸的鲸鱼阅读 413评论 0 0
  • 也不知为什么,每天该做的的事做完了,却发现时间也在眼皮底下明目张胆的溜走了,我也并不希望时间会停下脚步等我,一来会...
    权慧阅读 131评论 0 0