js第一个星期

什么是一个变量

变量就是一个容器

如何创建一个变量

var 容器的名称

var x;  创建一个叫x的容器

命名规则

名字区分大小写

 不可以用汉字

可以是使用英文大小写 - $

不能用数字开头

不可用关键字和保留字作为变量名

关键字和保留字是js在开发的时候,自己内部使用过的一些具有某些特征的单词,

 这些单词被js使用了,我们在定义变量的时候就不能在使用了

赋值符的右边是值

                左边是变量

赋值符将右边的值放到左边的变量中存起来

自增(++)和自减(--)

var a=2;

a++;

放前面后面都一样都表示自增;

console.log(a);

当自增自减运算碰到输出的时候,++在前面就先进行++自增,然后再输出

如果++在后面,就是先输出这个值,然后再进行++自增

 ++在前面和后面的区别,还有别的情况:进行数学运算、输出、赋值的时候

总结:

 如果自增自减运算碰到 输出、赋值、数学运算的时候,符号在前面就先进行自增自减运算,然后进行输出、赋值、数学运算,如果符号在后面,

就是先进行输出、赋值、数学运算,然后再进行自增自减运算

如果是自己单独的一个变量进行自增自减的时候,符号放在变量前面和后面没有区别

字符串的拼接:

var a=1;

var b='23';

var c=a+b;

+只有左右两边有一个是字符串,就会使这两个字符串连在一起组成一个大的字符串

console.log(c);  输出字符串的123

var a;

var b=null; 

var c=a+b;

 console.log(c);  输出NAN

var a='qaaz'

var b='cvv'

var c=a+b;

console.log(c);  形成新的字符串qaazcvv

将数据显示在页面中

alert数据 将数据以弹窗的形式在页面显示 通常在给用户做提示

document.write(a); //以文本的形式显示在网页中

confirm.log(a);// 提示用户是否确定和取消的弹窗,提示用户是否确定进行下一步操作  例:

confirm("你确定要删除吗");

var a=confirm("你确定要删除吗");

prompt(a);提示用户可以输入的弹窗

例:var a=prompt("输入你的银行卡密码:");

数学运算符

符号有+  -  *  /  %(取余的)

数据类型

typeof 用来检测数据的类型

js有5种数据类型:number(数字类型)、string(字符串类型)、underfined(未定义型)、boolean(布尔类型 只有true  false两个值用来描述事物的两面性)、object(对象类型)

数字类型number包含哪些数据 正数,负数。整数,小数 ,0

string字符串 一串字符组合起来用引号引起来,单引号双引号都行

布尔类型:编程中,有一种类型用来描述对与错,真和假,表示事物的两面性 boolean, 布尔类型只有两个值:true  false

对象类型 object

var a=[]; 数组

var a={}; json对象

var a=null; 表示空 什么都没有

数据类型转number

1.var b=Number(a); // 将转换的结果赋值给了子变量b

 console.log(b);

console.log(typeof b);

2.parseInt(被转换的数据); // 支取整数部分

 var b=parseInt(a);

console.log(b); 

3.parseFloat(被转换的数据); 将数据转成数字中的小数 没有变

var b=parseFloat(a);

console.log(b);

4.Math.round(被转换的数据); 将数据转成数字并四舍五入

    var b=Math.round(a);

    console.log(b);

总结:

数字型的字符串,Number和parseFloat转换的结果时一样的, parseInt时支取整数部分。

不是纯数字的字符串,但是由数字开头的,Nunmber和Math.round转成的时NaN,也是parseInt

取整,parseFloat取小数部分

不是由数字开头的字符串,被转换的结果都是NaN。

数转字符串

var a=10; //a是数字类型

var b=String(a);    // String(被转换的数据)

console.log(b);

toString() // 被转换的额数据 .toString

var b=a.toString();

console.log(b);

布尔值转字符串

var a =true;

var b =String(a);

console.log(b);

underfined转字符串

var a;

var b=String(a);

console.log(b);

null转字符串

var a=null;

var b=String(a);

console.log(b);

数字转布尔类型

var a=1;

var b=Boolean(a);

console.log(b);

数字转布尔类型,除了0都是ture 0是false

字符串转布尔类型

var a='';

var b=Boolean(a);

console.log(b);

字符串转成布尔类型,除了空字符串是false 其他都是true

undefined转布尔类型  -false

var a;

 var b=Boolean(a);

console.log(b);

null转布尔 -false

    var a=null;

    var b=Boolean(a);

    console.log(b);

比较符运算

比较运算:> < >= <= ==

==相等 比较两个容器中的值是否一样 也是布尔值显示

===   全等  先比较两个值的类型是否相等,如果不相等就直接false,如果相等了在进行比较值

            主体到内容都要一样

!=绝对不等于 类型同上

赋值运算

=赋值符右边是值 左边是变量 作用是将右边的值赋给左边的变量

+=代表相加以后的结果重新赋值给这个变量(其他运算同理)

逻辑运算符

||   表示或者       只有全假才假

&&  表示并且      一假即假

if 单分之 只有一条路可以做 那么就选择不走

语法

 if(条件-最终结果必须是一个布尔类型){

        // 条件如果是ture ,就执行这里的代码

        // 条件如果是false ,就没有显示

  }

有两条路可以走 选择其中一条走 双分支

语法

if(结果是布尔类型的条件){

    条件是true的时候执行的代码

}else{

    条件是false的时候执行的代码

}

多分支语法

if(条件){

//    条件为true的时候执行的代码

}

else if(条件){

//    如果条件为true的时候执行的代码

 }

else if(){

 }...

多分枝

switch(变量- 得到一个值){

    case 值1:

    如果小括号里的值和值1相等了 就执行代码

    break;

    case 值2:

    如果小括号里的值和值2相等了 就执行代码

    break;

    case 值3:

    如果小括号里的值和值3相等了 就执行代码

    break;

    ....

    default:

    上面的值都不相等时 ,执行的代码

}

注意:代码中,如果要判断一个区间,使用if多分支,

如果判断具体的值是否相等使用switch语句;

switch 总结

1.switch只能判断是否相等

2.判断使用===来进行

 3.break是来终止switch执行,去掉以后,就会执行下一个case

分支嵌套

if(){

        if(){

        }

    }

总结:

switch和if都能进行多分支的判断

switch和if的区别;

1.switch只能判断是否相等,使用绝对等于===来判断的

2.break可以省略---造成执行了第一个case之后,执行第二个case

3.switch 在分支大于3个的时候,效率要比if多分支高

    // 如果判断某个值的,并且分支结果大于3个的,使用swith

隐式转化

字符串拼接时

var a=11;

var b="222";

var c=a+b;

加号左右两边有一个是字符串,另一个也会悄悄的转成字符串

console.log(c);

数学运算时

var a=10;

var b="2";

var c=a-b;

数字才能进行数学运算,这个时候字符串悄悄的的转成了数字;

除了+ 别的数学运算,都会将两边的数字转成数字进行运算

console.log(c);

进行比较的时候

var a=prompt('输入数字');

var result=a>2;

字符串和数字不具有大小的可比性

console.log(result);

 比较运算的时候,左右两边只要有一个数字。另一个也会转成数字进行比较

var a='5';

var b='20';

console.log(a>b);

这两个时字符串的比较,没有一个时数字,所以不能隐式转换

如果字符串转成数字成了NaN

1.NaN和任何数字都没办法比较大小跟任何数字进行任何比较都是false

2.NaN自己也不等于自己

3.NaN的类型是数字

var a = '文字';

var b = 2;

// console.log(a==b); // 文字也转成数字了,只不过是NaN

隐形转换:

        1.字符串拼接时:如果+左右两边有一个字符串,另一个也会转成字符串

        2.数学运算时:非+法的数学运算,左右两边有一个字符串 会将符号左右两边的数据转成数字

        3.比较运算时:如果比较的两个数据有一个是数字,另一个也会转成数字

        4.将数据放在分支结构的小括号中,会转成布尔值

document.write('加粗<br>这里有字</br>');

想在文本上输出标签,使用document.write();来输出,并且将这个标签当作一个字符串

while 语法来事项循环

语法:

while(条件){

    要重复执行的 代码段

}

例:

var a=1;

while (a<=10){

    document.write("从头开始学了" +"<br>");

    a++;每次执行后让计数器+1逻辑

}

do while

语法:

    do{

        代码段-首先执行一次,在进行while

    }while(条件)

先执行一次,执行以后,就和while的流程一样了

(不管条件成不成立 都会执行一次)

for循环

for 语法:

三要素  1.变量的初始值

             2.条件

            3.变量的变化

 for(三要素){

}

例:

通过for循环来输出 1~5

 for(var a=1;a<=5;a++){

    document.write('单身');

    document.write('<br>');

}

break; // 停止循环

continue;// 跳过当前循环 到下一个循环

循环嵌套

就是在往循环里在写一次循环

注意 :例外层循环变量不一样

例:

九九乘法表

 for(var i=1;i<=9;i++){

    for(var a=1;a<=i;a++){

        document.write(a+"*"+i+"="+a*i+"&nbsp;&nbsp;&nbsp;&nbsp;")

    }document.write("<br>")

}

函数

函数 函数是我的一个数据类型

 函数的作用就是把一段功能性的代码放到一个空间里    拿出来就可以用

1.申明式函数

语法:function 名字(){

}

注意:

        1.在声明式中只有在调用的这个函数的时候,里面的代码才会执行

function :就是一个生命函数的关键字

名字:就是给这段空间自定义一个名字 

():存放参数的位置

   {}:要存放的代码

function fn(){

    console.log("声明式")

}

2.赋值式

语法:var 名字 = function(){

}

var:定义变量的关键字

名字:就是给这个函数定义的名字

():存放参数的位置

{}:要存放的代码

var fun = function(){

    console.log("这是赋值式")

}

函数的调用

    1.直接调用

    如实让这个函数内部的代码执行

    直接写  ----》函数名()

    ():  就是调用的意思

    2.依赖行为调用 

        在一个页面里面

调用时机上的区别

当调用一个函数的时候 方式都是一样的 但是调用的事件,取决使用哪种方式定义函数 

申明式函数(function()fn {})

可以在申明之情调用 ,也可以在声明之后盗用

赋值式函数  (var fun )

只能在申明之后调用    如果在生命声明之前调用的话是is not a function

申明的不是一个函数

函数的参数

1.形参

就是写在函数定义时候的()里面的

可以写对个,多个的时候中间使用逗号(,)分隔

就是一个只用在函数内部使用的变量

2.实参

就是写在函数调用的时候的()里面的

可以写对个,多个的时候中间使用逗号(,)分隔

是一个准确的数据

用来给对应的新参赋值的

参数的个数

1.新参和实参一样多

    按照从左到右 一一进行赋值

2.形参比实参多

    前面一一对应  后面都出来的形参没有实参赋值 

    在函数内部调用的时候 就是一个没有赋值的变量  就是undefind

3.实参比形参多

    前面的一一对应  后面多出来的就 没有形参接受

arguments

函数内部的一个特殊的变量 arguments

在每一个函数内部  都有一个天生的变量

不需要我们的定义  直接用就行

arguments  表示所有实参的集合

arguments: 会把所有的实参按照从左到右的顺序依次排序

给每一个实参一个编号 (索引/下标)

这个编号(索引/下标)是从0开始的 依次递增

arguments[编号]  这样就可以的到一个准确的值

arguments还有一个属性 交length

表示arguments 这个集合的长度 ,也就是这里面有多个数据

值是一个number 数据类型的数字

如果要得到这个属性就写arguments.length

function fn(){

    console.log(arguments)

    console.log(arguments.length)//得到数据的个数

    console.log(arguments[2])//这样就拿到了下标为2的值

}

fn(100,200,300)

使用循环遍历真个arguments 获得到每一个数据

因为arguments的所索引(下标)是按照从0开始的

可以使用循环的方式来遍历 arguments

函数的返回值

返回值:也就是一个函数的结果

在函数里面添加返回值使用return关键字

return 就是在函数里面使用的

返回关键字

作用:

    1.作为函数的返回值使用

    2.打断函数不在继续执行

    当函数内部的代码 使用 return关键字以后  return后面的代码就不执行了 直接结束函数

    break 是结束循环的关键字

    return 是结束函数的关键字

function fn(){

    console.log("第一行大妈");

    console.log("第一行大妈");

    return;

    //后面的代码就不在执行了

    console.log("第一行大妈");

    console.log("第一行大妈");

}

fn()

预解析

预解析     就是js的执行过程

什么是预解析 

    预:在所有js 代码执行之前

    解析:对整篇js代码进行通读并解释(浏览器在解析)

解析了什么内容(只有两种内容)

    1.var 声明的变量

        var num

    2.声明式函数(不是赋值式函数)

    function fn(){}

怎么解析的

1.var 声明的变量

    在所有js代码执行之前 先把变量声明好

    在开始执行代码

2.申明式函数

    在所有js 代码执行之前 先把函数名申明好 ,

    并且给这个函数名赋值为一个函数,在开始执行代码

申明式函数

function fn(){}

预解析这个代码

1.与解析的过程

告诉浏览器,fn是一个可以使用的名字

并且fn 这个名字是一个函数

赋值式 函数的与解析

    赋值式函数不会按照申明式函数的与解析进行

    而是按照var的与解析规则进行

    var fn = function(){}

//fn() // fn is not a function

var fn = function (){

    console.log('我是 fn 函数')

}

fn()  //在这里调用就可以答应出来 也就是赋值式不可以上下都用  但是申明式 就可以

预解析无节操

    1.不管if条件是不是成立  写在{}里面的代码都会进行预解析

    只是条件不成立的时候 ,不会执行{}里面的赋值操作

    2.当在函数内部的时候 ,return 后面的代码虽然不会执行但是会进行预解析

预解析的优先级

    当定义一个变量好一个申明式函数的时候

    如果变量名和函数名冲名  在预解析的时候 以函数为准

作用域

    一个东西可以生效的范围

    东西就是变量(变量名,函数名)

    既是一个变量可以生效的范围

作用域分类

    两类:

    1.全局作用域

    一个html 就是一个全局作用域

    打开页面的时候,作用域就生成了 直到关闭页面为止

    2.局部作用域(私有作用域)

    只有函数生成局部作用域

    每一个函数就是一个私有作用域

作用域的上下级关系

    全局作用域最大,所有的私有作用域都是在全局作用域下的

    函数生成的私有作用域 函数写在哪个作用域里面就是哪个作用域的子集

//这个位置就是全局作用域

function fn(){

//这个位置就是全局作用域的一个叫fn的子集作用域

    function  fun() {

        //这个位置就是全局作用域下的fn 私有作用域下的 fun私有作用域 

    }

}

作用域的规则

1.定义

有 var关键字

或者 function 函数名(){}

var num            //定义变量

function fn() {}    //定义变量

2.使用

当需要拿到一个变量的值去使用的时候

console.log(num)  //使用num 的值 打印出来

1+num        //使用num 的值 去加1

var abd = bun //使用num 的值 赋值给ABC

3.赋值

个一个变量进行赋值的操作

num =100;      //把100赋值给num

num = function (){}    //要把函数这个值 赋给num这个变量

变量定义规则 

    当定义一个变量的时候

    把这个变量定义在哪个作用域里面

    就只有这个作用域及其后代作用域才可以使用

    当前作用域的所有祖先记作用域不能使用

变量的使用规则

当需要使用一个变量的时候

先在自己作用域内查找,如果有就是直接使用 ,停止查找

如果没有 ,就去上一级作用域查找  有就使用 ,停止查找

如果还没有 ,就在去上一级查找直到全局 有就使用 没有就undefinde

变量赋值规则

当需要给一个变量赋值的时候

先在自己的作用域内部查找  如果有  就给自己作用域的变量赋值

如果没有 ,就向上一级查找 ,如果有就给父级的变量赋值

如果还没有 ,就继续向上查找

直到全局作用域都没有  那么就把这个变量定义为全局变量 ,在进行赋值

对象数据类型

    对象(object):是复杂数据类型的一种

    对象里面是存贮数据的

如何创建一个空对象

    1.字面量形式创建对象

    var obj = {}

    2.内置构造函数创建对象

    var obj = new obj()

两种区别

1. 字面量创建

可以在创建的时候直接存放一些数据放在对象空间内

也可以在后期使用代码里面添加或删除

直接在{}里面书写

  要起得名 : 内容       键值对

  多个时 用逗号分开

2.内置构造函数

目前只能在后期用代码的形式往里添加

//创建一个空对象 对象空间起名为obj 直接创建

var obj = {}

console.log(obj)

//内置构造函数  通过new 创建

var obj = new Object()

console.log(obj)

操作对象

就是对对象空间内部的数据进行增删改查

          增: 向对象空间里面存储一个数据

            语法: 对象名.你自己起的名字 = 你要存储的值

          删: 删除对象空间里面的某一个数据

            语法: delete 对象名.你要删除的数据的名字

          改: 修改对象空间里面的某一个数据

            语法: 对象名.你要修改的名字 = 你要修改的值

          查: 获取对象空间里面某一个数据

            语法: 对象名.你要查询的数据的名字

            找不到的时候, 就是 undefined

例:

var tun={

        name:"豚豚",

        age:"24",

        sex:"女",

        work:"yes",

        bf:{

            name:"老秦",

            age:23,

            dag:"奶球,八宝"

        }

}

//增

tun.money=200000;

//删

delete tun.work;

//改

tun.money=10000;

//查

console.log(tun.bf);

//打印 tun 

console.log(tun);

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