javascript基础知识整理1

引入js文件使用script标签,src属性用于书写引用的地址
变量
1.变量的作用? 存储数据

数据分为两种: /
固定数据:保存在硬盘中的固定的数据
临时数据:临时的数据是保存在内存中

数据是保存在内存中的某一个区域的,每个区域对应一个内存地址,我们想要使用某个区域中的数据,就需要找到指定的地址,使用起来不方便。
我们可以通过变量,变量实际上保存的是某个数据的地址,我们使用变量实际上就是使用变量中保存的地址中的数据。

2.变量的使用
3.变量的声明:

var 变量名; var—variable可变的 js是弱类型语言,变量的类型不定,可变

3.1变量的命名规则:

1、 不能使用关键字和保留字
2、 开头可以使用_$英文字母
3、 除了开头以外可以使用数字
4、 不能包含空格
5、 严格区分大小写 var a; var A;

3.2变量的赋值和初始化

初始化:在变量声明同时进行赋值 var num = 100;
赋值: var num = 100; num = 10; 由于js是弱类型,保存数值型的变量也可以保存其他类型数据。但是我们不推荐这样做,可能会对使用造成不良影响。

3.3变量的类型

基本数据类型:字符串string 数值型number 布尔类型boolean undefined null

字符串的值:
使用成对的双引号或者单引号进行包裹
js中所有的标点符号必须为英文半角 adwdwadaw dwaddwadawdwa

数值型的值:
0-9 0.1 0.2
NaN – not a number 不是一个数值类型
isNaN(数据); 是不是不是数 如果判断的数据不是数值型返回true
Infinity 表示无穷大,超出了js能承受的最大值
-Infinity 表示无穷小

布尔类型
true 真 false 假

undefined defined 定义
undefined出现的情况 变量声明未赋值

null 空

数据类型判断
typeof 变量 typeof(变量)

3.4变量的类型转换:

将其他类型转换为字符串类型:
1、 强制转换
a) toString()
变量.toString()
b) String()
undefined和null不支持toString()方法

2、 隐式转换
a) 通过任意类型+任意字符串操作可以将其他类型转换为字符串类型
b) 在使用+操作的时候为了不改变数据的原有内容,使用空字符串
c) 空字符串中不能有任何内容

基本类型值的不可变性
通过类型转换或者重新赋值都无法修改基本类型的原有值。

转换为数值型:
1、 强制转换
a) Number() 只能转换全部是数值型的字符串
b) parseInt() 可以转换前半部分为数字的字符串,转换结果为整数
c) parseFloat() 可以包含小数
2、 隐式转换
a) -*/% 可以进行转换
b) +操作需要将+号放在数据前进行使用。

转换为bool类型:
1、 强制转换
a) Boolean()
i. 转换值为false : 0 undefined null “” NaN
ii. 有值的字符串 有值的数
2、 隐式转换
a) !!

undefined和null类型只有一个值,不需要转换。

交换两个变量的值

4.运算符

算数运算符: +-*/%
一元运算符:一元指的是操作数的个数 ++ –
前置和后置不同。
前置:先自增(减) 然后参与当前运算
后置:先参与运算,再自增(减)

逻辑运算符:
操作数都是bool值时:
逻辑与(且) && 两个操作数都为true结果为true
逻辑或 || 有一个为ture就为true,两个都为false,结果为false
逻辑非 ! 取反
操作数不是bool值: 短路操作

比較运算符:

< >= <= != !== 返回结果为bool类型

赋值运算符:
= += -= *= /= %=

相等运算符
== 相等比較值 === 全等比較值和类型
注:相等比较值,不完全准确。会有特殊的地方。

运算符的优先级

5.条件判断语句

if else 分为三种结构;
单if结构:
if(条件){
满足条件执行,不满足继续向下
}

if..else:
if(条件){
条件满足执行
}else{
条件不满足执行
}

多个ifelse的情况:
if(){

}else if(){

}..else{

}

6.switch case语句

比较时是全等比較
switch(传入值){
case 值:
执行内部代码;
break;
case 值:
执行内部代码;
break;
default:
所有人都没执行,执行我。
}

通常情况下我们使用ifelse进行范围比较,使用switchcase进行单值比較。

7.三元运算符

bool表达式?表达式1:表达式2; bool表达式为真,执行表达式1否则执行表达式二

8.循环语句

for循环语法
for( 1循环变量初始化; 2循环条件; 4循环变量增减){
3循环内的代码
}

执行顺序 1 2 3 4 2 3 4 2 3 4

break 在循环内表示跳出
continue表示结束本次循环,进入下一次循环

while循环和dowhile循环

for循环和while和do..while可以互换使用的。

小数精度问题
在js中小数进行加减计算精度不准确,我们可以通过扩大要计算的数值来避免这一问题

var num1=0.1*100;
var num2=0.2*100;
console.log((num1+num2)/100)

字符串的长度属性
str.length 可以得到字符串的字符个数

转义符
如果在字符串中想要使用一些具有特殊含义的字符,例如引号,可以使用反斜杠\进行转义。后面正则表达式的地方会继续讲解。

undefined出现的情况

 var num1;
 console.log(num1);//undefined;
 console.log(num)//报错,变量未声明直接报错。

变量声明未赋值,值为undefined,如果声明也没有,会报错

undefined和null的关系
相等(==),不全等(===)

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

进制方法
进制的转换(了解)

var num=10;
console.log(num.toString(16))
//toString()传入一个数值,表示得到几进制的值。
var str="10";
consoe.log(parseInt(str,2));
//表示传入的是个几进制的数。

将其他进制转换为10进制
0x10 16进制的写法 021 8进制
当前位的数值*进制数(8) 位数 注意,位数是从右往左算,第一位的位数为0
8进制的021转换为十进制: 1 * 80 + 2 * 81 + 0 * 82 = 17

if的隐式转换

if("呵呵"){//"呵呵”隐士转换为true
}

数组

为什么要有数组?
可以存储多个数据

数组的声明方式
var arr = [10,12,13,12];
var arr=new Array(10,12,13,12);
元素
数组中的每一个数据我们称为元素

由于js是弱类型,一个可以存储不同类型的元素。

一般不推荐在数组中保存多个类型的数据

数组的长度属性
arr.length 数组中元素的个数

数组的索引
数组中的元素是按照索引排列的,索引从左往右计算,第一位为0

遍历数组

我们将i看作数组的索引,从0开始,最大值

数组中最后一项的索引是arr.length-1

向数组最后添加一个新元素索引值为arr.length arr[arr.length]

数组的长度是随着数组元素的增减而增减的。

数组的长度可以进行设置,如果设置的长度大于数组元素个数,不影响内容,多出的部分值为undefined
如果小于了元素个数,超出的部分元素会被删除掉。
数组的类型
数组是一个复杂数据类型,通过typeof检测时得到object,不准确,我们可以通过下列方法去检测数组的类型。

var arr=[];
console.log( arr instanceof Array);//相对常用,true or false
console.log(Array.isArray(arr))//ie以下不支持,true or false
console.log(Object. prototype.toString.call(arr)=="[object Array]")

前两种得到的是bool值,最后一种得到字符串
基本数据类型和复杂数据类型的区别?
直观区别,数据量不同。
复制的区别:
保存上的区别:
基本数据类型的值保存在栈中

这里写图片描述

这里写图片描述
数组的复制
由于数组是引用类型(复杂数据类型),复制的时候会出现问题,我们需要用特殊的复制方式。

这里写图片描述

数组补充:

数组的声明:
var arr = [1,2,3,4,5]
var arr = new Array(1,2,3,4,5);
var arr = new Array(3) 输入一个数值表示设定默认长度,但是没用
综上所述,我们使用var arr = [];

索引问题:
arr[0] = 1;
arr[“0”] = 1; 跟上一个方式相同
二维数组:
var arr = [1,2,3,4,5,[1,2,3]];
如何遍历二维数组?
函数
为什么要用函数,当某一段代码的重复使用次数多时,我们可以使用函数这种方式实现重用。

1、函数的声明方式
function 函数名 ( ) {
大括号的作用是标示代码的范围
}

2、函数的调用方式。
函数内部代码本身不执行,需要调用。
调用方式 函数名();

3、函数的定义
函数是在调用时执行的可重复使用的代码块。

4、函数的参数
写在函数体的小括号内,多个使用,分隔
function 函数名(参数1,参数2。。。。){
函数代码
}

写在函数体内的参数称为形参-形式上的参数
函数的返回值:
在函数内声明的变量在函数外无法访问。

如果想要让函数的计算结果被外界得到,可以通过设置函数的返回值来实现。
在函数的最后添加return 值。
返回值通过函数调用语句进行接收。
return执行后直接结束函数,return后面的代码不会继续执行了。

函数没设定返回值,值为undefined。
函数名代表了函数体(函数本身)
arguments
arguments表示当前函数的实参列表(保存了当前了),本身是一个伪数组。
伪数组:支持长度和索引,但是不支持数组的方法。

*在其他语言中有重载,js中没有,js中函数不能重名,我们可以通过判断arguments的length来模拟这一效果。

函数的参数传递。
js中函数的参数传递方式为 值传递 (形参复制了实参的值)。
基本类型在复制的时候,相当于克隆,两者没有任何关联。
引用类型在复制的时候,两者指针(引用相同),也就是说两者是一样的。

函数的声明方式:
function 函数名(){},
使用函数声明,在函数声明语句的前后都可以进行调用

foo();
function foo(){
    alert("woshifoo")
}
foo();

函数表达式:
只能在声明语句之后进行调用
var fun = function(){};

fun()//报错   
var fun=function(){}
fun();

变量作用域
script标签内称为全局作用域。
在全局作用域下声明的变量称为全局变量,全局变量在全局可以访问。

在函数内部称为局部作用域。
而在函数内声明的变量,称为局部变量,局部变量只能在局部访问。

当我们在某一个作用域内使用变量时,寻找的时候是优先当前作用域

作用域大的区域无法访问作用域小的内部的变量。
作用域小的区域可以访问外部的变量。

变量提升
提升到当前作用域顶端
在每个作用域的代码执行前存在一个步骤,称为预解析。
在预解析阶段会寻找当前作用域内的var和function
//当找到变量var的时候,将变量声明语句提升赋值语句保留在原地。
//找到函数声明function时,函数整体提升(注意只有函数声明方式。函数表达式遵循变量提升的规则)。

变量的怪异声明方式:
var a = b = c = 9; 只有a属于当前作用域,b和c都是全局变量。(最好不这么写)

声明变量时不加var,这个变量就是全局变量。(最好不要这么写)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值