JS入门

js了解

  • chorme :v8最快
  • js的特点
  • 解释性语言(不用编译)
  • 类似于c和Java的语法结构
  • 动态语言
  • 基于原型的面向对象

js三条语句

下面三条都写得话,从上到下依次执行,即进行第一个之后点确定才会执行达其他两个

  • alert(“这只我的第一行js代码”);
  • document.write(“看我出不出来~~~”);
  • console.log(“你猜我在哪出来呢?”);
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- js代码需要编写到script标签中 -->
    <script type="text/javascript">
    // <!-- 控制浏览器弹出一个警告框 -->
    alert("这只我的第一行js代码");
    // 让计算机在页面中输出一个内容
    // document.write().可以向body中输出一个内容
    document.write("看我出不出来~~~");
    // 向控制台输出一个内容
    // console.log()的作用是向控制台输出一个内容
    console.log("你猜我在哪出来呢?");

  </script>
</head>
<body>
    
</body>
</html>

js编写位置(三种)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 可以将js代码编写到外部js.js文件中,然后通过script标签引入 
    写到外部文件中可以在不同的页面中同时使用,也可以利用浏览器的缓存机制,推荐使用的方式-->

    <!-- 
        script标签一旦用于引入外部文件了,就不能在编写代码了,即使编写了浏览器也会忽略
        如果需要则可以创建一个新的script标签用于编写内部代码
     -->
     <script type="text/javascript" src="地址">即这里不能写</script>
     <script type="text/javascript">
    alert("我是内部的js中的代码!");
    </script>
<!--    
    可以将js代码编写到script标签中
    <script type="text/javascript">

    alert("我是script标签中的代码!!");

    </script> -->
</head>
<body>
    <!-- 可以将js代码编写到button标签的onclick属性中 -->
    <!-- 当我们点击按钮时,js代码才会执行 -->
    <!-- 
        虽然可以写在标签的属性中,但是他们属于结构与行为耦合,不方便维护,不推荐使用
     -->
    <button onclick="alert('讨厌,你点我干嘛~~')"></button>
    <!-- 
        可以将js代码写在超链接href属性中,这样当点击超链接时,会执行js代码
     -->
     <a href="javascript:alert('让你点你就点!!')">你也点我一下~~</a>
     <a href="javascript:;">你也点我一下</a>
</body>
</html>

js注释

/*
  js 注释
    多行注释,注释中的内容不会被执行,但是可以在源代码中查看
    要养成良好的编写注释的习惯,也可以通过注释来对代码进行一些简单的调试
 */

    //    单行注释

    // 1.js中严格区分大小写
    // 2.js中每一条语句以分号结尾(;)
    // 如果不写分号,但会消耗一些系统资源
    // 而且有些时候,浏览器回加错分号,所以在开发中分号必须加
    // 3.js中会忽略多个空格和换行,所以我们可以利用空格和换行对代码进行格式化

字面量和变量

    <title>Document</title>
    <script type="text/javascript">
      /*
      字面量,都是一些不可改变的值
      比如:1  2 3 4 5
      字面量都是可以直接使用,但是我们一般不会直接使用字面量

      变量  变量可以用来保存字面量,而且变量的值是可以任意改变的
      变量更加方便我们使用,所以在开发中都是通过变量去保存一个字面量
      而很少直接使用字面量
      可以通过变量对字面量进行描述
      */

    //   声明变量
    // 在js中使用var关键字来声明一个变量
    var a;
    //为变量赋值
    a = 123;
    a = 456;
    console.log(a);
    //声明和赋值同时进行
    var a = 123;
    
    </script>

标识符

    <title>Document</title>
    <!-- 
        ****标识符****
    1.在js中所有的可以由我们自主命名的都可以命名为标识符
    例如:变量名,函数名,属性名都属于标识符
    命名一个标识符需要遵循如下的规则:
    
      1.标识符中可以含有字母,数字,下划线,$
      
      2.标识符不能以数字开头
      
      3.标识符不能是ES中的关键字(var,if)或保留字(可能会用,class等)
      
      4.标识符一般都采用驼峰命名法
         首字母小写,每个单词的开头字母大写,其余字母小写
         helloWorld  xxxYyyZzz
     js底层保存标识符实际上是采用unicode编码
          所以理论上讲,所有的utf-8中含有的内容(锄禾日当午,但千万不要这么写)都可以作为标识符 
         -->
         <script type="text/javascript">
         var 锄禾日当午 = 234;
         console.log(锄禾日当午);
        </script>
</head>

number

  • 1.在JS中所有的数值都是Number类型,包括整数和浮点数(小数)

  • 2.var a =123; var b=“123”;console.log输出都是123;

    可以使用一个运算符typeof来检查一个变量的类型 语法:typeof 变量 console.log(typeof a);
    检查字符串时,会返回string,检查数值时,会返回number;

  • 3.console.log(Number.MAX_VALUE);Number.MAX_VALUE,JS中可以表示的数字的最大值(1.7976931348623157+308)
    如果使用一个Number表示的数字超过了最大值,则会返回一个Infinity,表示正无穷,自面量;-Infinity,表示负无穷
    使用typeof检查也Infinity会返回Number

  • 4.var a=“123” * “123”;输出类型是一个NaN,NaN是一个特殊的数字,表示Not A Number,使用使用typeof检查也NaN会返回Number

  • 5.console.log(Number.MIN_VALUE);5e-324大于零的最小值

  • 6.在js中整数的运算基本可以保持精确,如果使用js进行浮点运算,可能得到一个不精确的结果,所以千万不要使用js进行对精确度要求比较高的运算

字符串

1.数据类型指的就是字面量的类型
2.在js中一共有六种数据类型(五种基本数据类型)
    string 字符串
    Number 数值
    Boolean 布尔值
    Null 空值
    undefined 未定义
    Object  对象
        其中 string Number  Boolean  Null undefined 属于基本数据类型,以后我们看到的值只要不是上面的五种,全都是对象
        而Object属于引用数据类型
    
3.字符串:
        在js中字符串需要使用引号引起来
        var str = "hello";
        使用双引号或者单引号,但是不要混用
        引号不能嵌套,双引号里面不能放双引号,单引号里面不能放单引号,但是双引号里面可以放单引号,反之也成立
        如果必须用俩双引号:在字符串中使用\作为转义字符
        \" \' \n \t \\(成倍写) 与c相同
        //输出字面量str
        alert("str");
        //输出变量str
        alert(str);
        

Boolean 布尔值

  • 布尔值只有两个
    true:表示真
    false:表示假

var bool = true; console.log(typeof bool);

  • 使用t6ypeof检查一个布尔值时,会返回一个boolean

Null和Undefined

  • Null类型的值只有一个,就是null

  • null这个值专门用来表示一个为空的对象

var a =null; console.log(typeof a);

  • 使用typeof检查一个null值时,会返回object;

  • Udefined(未定义,声明未赋值)类型的值只有一个,就是Undefined

var a = null;var b; console.log(b);

  • 当声明一个变量,但是并不给变量赋值时,它的值就是undefined

  • 使用typeof检查一个Undefined时也会返回undefined;

强制类型转换

  • 只将一个数据类型强制转换为其他的数据类型
  • 类型转换主要指,将其他的数据内型,转换为
    string,Number,Boolean

    string

    方式一:
    • 调用被转换数据类型的toString()方法
    • 该方法不会影响到原变量,它会将转换的结果返回
    • 局限但是注意,null和undefined这两个值没有toString()方法,如果调用他们的方法,会报错
var a = 123;
调用a的toString()方法,调用xxx的yyy()方法,就是xxx.yyy();
a.toString();

var a = 123;
var b/a = a.toString();
console.log(typeof b/a);string
console.log( b);123

a=null;
a=a.toString();报错

方式二:

  • 调用string()函数,并将被转换的数据作为参数传递给函数;
  • 使用String()函数做强制类型转换时,对于Number和Boolean实际上就是调用的toString()方法,但是对于null和undefined,就不会调用toString()方法,他会将null直接转换为"null",将undefined直接转换为"undefined",即 null,undefined也可以转换
var a = 123//调用string函数,来将a转换为字符串
a = string(a);
console.log(typeof a);

Number

方式一:

  • 使用Number()函数
    字符串转数字:
  • 1,如果是纯数字的字符串,则直接将其转换为数字
  • 2,如果字符串中只要有非数字的内容,则转换为NaN
  • 3,如果字符串是一个空串或者是一个全是空格的字符,则转换为0
    布尔转数字
  • true—>1
  • false—>0
    Null转成数字为0
    undefined转成数字为NaN
var a ="123";
//调用Number()函数来将a转换为Number类型
a = Number(a);
console.log(typeof a);number
console.log(a);123

//如果是
var a = "abc";
a = Number(a);
console.log(typeof a);number
console.log(a);NaN(不是一个数字);

方式二:

  • 这种方式专门用来对付字符串
  • parseInt()把每一个字符串转换为一个整数
  • parseFloat()把一个字符串转换为一个浮点数
//问题1:取整数
var a ="123px";
a = Number(a);
console.log(a);NaN
解决:
var a ="123px";
调用parseInt()函数将a转换为Number
parseInt()可以将一个字符串中有效的整数内容读出来(遇到第一个不是数字的就不读了),然后转换为Number
a = parseInt(a);
console.log(typeof a);number
console.log(a);123


//问题二:取小数
var a ="123.456.789px";
a = parseFloat(a);
console.log(typeof a);number
console.log(a);123.456
解析:如果对非string使用parseInt()parseFloat(),它会先将其转换为string,然后在操作
a = true;
a = parseFloat(a);"true"一样
console.log(typeof a);number
console.log(a);NaN

//问题三:间接取整
a = 123.45;
a = parseInt(a);"123.45"一样
console.log(typeof a);number
console.log(a);123

其他进制的数字

var a =123;
//在js中,如果需要表示16进制的数字,则需要以0x开头
a = 0x10;16
a = 0xff;255
console.log(a);

//如果需要表示8进制的数字,则需要以0开头
a = 070;56

//如果需要表示二进制的数字,则需要以0b开头,但不是所有的浏览器都支持,火狐,谷歌支持
a = 0b10;2

//问题:像"070"这样的字符串,有些浏览器会当成8进制转换,有些会当成10进制转换
a = "070";
a = parseInt(a);
console.log(typeof a);
console.log(a);70/56
解决:可以在parseInt()中传递一个第二个参数,来指定数字的进制
a = parseInt(a,10);

Boolean

方式一: 使用Boolean()函数
数字转布尔

  • 除了0和NaN,其余的都是true
    字符串转布尔
  • 除了空串,其余的都是true
    null和undefined都会转换为false
  • 对象也会转换为true
var a = 123;
//调用Boolean()函数来将a转换为布尔值
a = Boolean(a);
console.log(typeof a);
console.log(a);

方式二:(隐式类型转换)

  • 为任意的数据类型做两次非运算,即可将其转换为布尔值
  • 例子:var a = "hello" a = !!a;

算数运算符

  • 运算符也叫操作符
  • 通过运算符可以对一个或多个值进行运算,并获取运算结果,比如:typeof就是运算符,可以来获得一个值的类型,它会将该值的类型以字符串的形式返回
    string Number Boolean Null Object
var a =123;
var result = typrof a;
console.log(typrof a);number
console.log(typrof result);string

算术运算符

“+” “-” “*” “/” “%”

在加法中:
  • 当对非Number类型的值进行运算时,会将这些值转换为Number,然后进行运算(除了字符串加法)
    var a = true + false;1 2+null;2 true + 1;2
  • 任何数和NaN做运算,结果都是NaN

2 + NaN;NaN

  • 如果对两个字符串进行加法运算,则会做拼串操作,即将两个字符串合并输出(字符串太多想要换行,但是引号不能换行,所以可以使用加号,进行输出)

"123"+"456" = 123456;string "你好"+"世界"=你好世界

  • 任何值和字符串做加法运算,都会先转换为字符串,然后再和字符串做拼串的操作

result = 123 + "1";1231 result = true + "hello";truehello
我们可以利用这一特点,来将一个任意的数据类型转换为string,我们只需要为任意的数据类型 + 一个""(空串)即可将其转换为string,这是一种隐式的内型转换,由浏览器自动完成,实际上他也是调用string()函数

var c = 123; c = c + "";与c = string(c);本质相同

练习:

var result = 1 + 2 +"3";33 var result = "1" + 2 + 3;123

在减法中:可以将两个值进行减法运算,并将结果返回

var a = 100 - "1";99

在乘法中:
var a = 2 * undefined;NaN;
//undefined先转换为number为NaN,任何值和NaN运算都是NaN
//null转换为number为0

在除法中:

var result =5 / 2;2.5

其他:
  • 任何值做减乘除运算时都会自动转换为Number,我们可以利用这一特性做隐式的类型转换,可以通过为一个值-0 *1 /1来将其转换为Number(+0的话会进行拼串)
  • 原理和Number()函数一样,使用起来更加简单
在取模中:
  • 取余数

一元运算符

一元运算符,只需要一个操作数
“+”: 正号

  • 正号不会对数字产生任何影响

“-”:负号

  • 负号可以对数字进行负号的取反
  • 对于非Number类型的值,它会将先转换为Number,然后在进行运算
var a = true;
a = -a;
console.log("a = "+a);-1
console.log(typeof a);number
  • 可以对一个其他的数据内型使用+,来将其转换为number,它的原理和Number()函数一样
var a = "18";
a = +a;//在这里进行转换
console.log("a = "+a);18
console.log(typeof a);number
练习:
var result = 1 + "2" +3;
console.log("result = "+result);"123"

var result = 1 + +"2" +3;//使用+可以将任意的一个数据类型转换为number
console.log("result = "+result);6

自增和自减

自增:++

  • 通过自增可以使变量在自身的基础上增加1
  • a++与++a用法与c语言相同
var d = 20;
var result = d++ + ++d + d;20+22+22
console.log("result = "+result);

d = d++;20

逻辑运算符

JS 中为我们提供了三种逻辑运算符

布尔值
  • !非
    所谓非运算就是指对一个布尔值进行取反操作,true变false,false变true
    如果对一个值进行两次取反,它不会变化

a = !!a;

  • 如果对非布尔值进行取反,则会将其转换为布尔值,然后再取反,所以我们可以利用该特点,来将一个其他的数据类型转换为布尔值
var b = 10;true
b = ! b;false
console.log("b = "+b);
console.log(typeof b);
  • 可以为一个任意数据类型去两次反,来将其转换为布尔值,原理和Boolean()函数一样
  • && 与
    &&可以对符号两侧的值进行运算并返回结果
    运算规则:两个值只要有一个false,就false
var result =true && true;true
var result =false && true;false

JS中的与为短路的与:

true && alert("看我出不出来!");//出来
false && alert("看我出不出来!");//不出来

  • || 或
  • 运算结果:
    两个都是false,才返回false
var result =true || true;true
var result =false || true;true
  • JS中的或为短路的或:
false || alert("123");显示
true || alert("123");不显示
非布尔值的与或运算

&&

  • 对于非布尔值进行与或运算时,会先将其转换为布尔值,然后再运算,并且返回原值
  • true && true与运算,如果两个值都为true,则返回后面
var result = 2 && 1;
console.log("result = " +result);1

var result = 0 && 2;0
var result = 2 && 0;0
  • 与运算,如果两个值中有false,则返回靠前的false
var result = NaN && 0;NaN
var result = 0 && NaN;0
  • 如果第一个为true,则必然返回第二个值
  • 如果第一个值为false,则直接返回第一个值
    ||
  • 如果第一个值为true,则直接返回第一个值
result = 2 || 1;2
  • 如果第一个值为false,则直接返回第二个值
result = NaN || 1;1

空串转成布尔值为false

赋值运算符

  • 可以将符号右侧的值赋给符号左侧的变量
  • +=,-=,*=,/=与c相同,他们都是一个运算符
var a =123;
a += 5;

关系运算符

数值情况:
  • 通过关系运算符可以比较两个值的大小关系,如果关系成立它会返回true,如果关系不成立则返回false
    >
var result = 5>10;false
result = 5>4;true
console.log("result = "+result);

>=
<
<=

非数值情况:

-对于非数值进行比较时

console.log(1 > true);false
console.log(1 >= true);true
console.log(1 > "0");true
console.log(10 > null);true
  • 任何值和NaN作任何比较都是false
console.log(10 > "hello");false
console.log(true > false);true
  • 如果比较符号两侧的值都是字符串时,不会将其转换为数字进行比较,而会分别比较字符串中字符的Unicode编码
console.log("11" < "5");true
//这里是5>1,所以true
//如果比较的两个字符串型的数字,可能会得到不可预期的结果,在比较两个字符串类型的数字时,一定一定要转型
console.log("11" < "5");true
解决:
console.log("11" < +"5");


console.log("a" > "b");false
//比较字符编码时是一位一位进行比较
console.log("abc" < "b");true
//如果两位一样,则比较下一位,所以借用他对英文进行排序
console.log("abc" < "bcd");true

Unicode编码表

  • 在JS输出一个字符编码:在字符串中使用转义字符输入Unicode编码 \u四位编码

console.log("\u1C00");

  • 在网页中使用unicode编码:&#编码;(这里的编码需要的时十进制)
  • 查看,程序员(计算器)

相等运算符

相等
  • 用来比较两个值是否相等,如果相等会返回true,否则返回false
  • 使用==来做相等运算
  • 当使用==来比较两个值时,如果值的类型不同,则会自动进行类型转换,将其转换为相同的类型,然后在比较
console.log("1" == 1);true
console.log(true == "1");true
//将字符串和布尔值都转成number
console.log(null == 0);false
//没有将null转成number
  • undefined衍生自null,所以这两个值做相等判断时,会返回true
console.log(undefined == null);true
  • NaN不和任何值相等,包括它本身
console.log(NaN == "1");false
console.log(NaN == NaN);false

  • 判断b的值是否为NaN
console.log(b == NaN);
可以通过isNaN()函数来判断一个值是否是NaN,如果是NaN,返回true,否则返回false
console.log(isNaN(b));
不相等
  • 用来比较两个值是否相等,如果不相等会返回true,否则返回false
  • 使用!=来做不相等运算
  • 不相等也会对变量进行自动的类型转换,如果转换后相等他也会返回false
===全等
  • 用来判断两个值是否全等,他和相等类似,不同的是他不会进行类型转换,如果两个值的类型不同,直接返回false
!==不全等
  • 用来判断两个值是否不全等,他和不等类似,不同的是他不会进行类型转换,如果两个值的类型不同,直接返回true

条件运算符

  • 条件运算符也叫三元运算符
  • 语法:
    条件表达式?语句1:语句二;
  • 执行的流程:
    条件运算符在执行时,首先对条件表达式进行求值
    如果该值为true,则执行语句一,并返回执行结果
    如果该值为false,则执行语句二,并返回执行结果
  • 如果条件表达式的求值结果是一个非布尔值,会将其转换为布尔值,然后在进行运算,hello转成布尔值为true,空串转成布尔值为false
a > b ?alert("a大"):alert("b大");
//获取a和b中的最大值
var max = a > b ? a : b;
//获取a和b,c中的最大值
max = max > c? max : c;
//获取a和b,c中的最大值(一个语句)这种方法不推荐使用,阅读性差
var max = a > b?(a>c?a:c):(b>c?b:c);

运算符的优先级

  • 运算符使用,可以分割多个语句,一般可以在声明多个变量时使用,使用,运算符可以同时声明多个变量
var a = 1,b = 1;
  • 就和数学中一样,在JS中运算符也有优先级,比如,先乘除,后加减
  • 在JS中有一个运算符优先级的表,在表中越靠上优先级越高,优先级越高越优先计算,如果优先级一样,则从左往右计算,可以只用()来改变优先级

语句

  • 语句按照自上向下的顺序一条一条执行的,在JS中可以使用{}来为语句进行分组,同一个{}中的语句我们成为是一组语句,他们要么都执行,要么都不执行,一个{}中的语句我们也称为叫一个代码块,在代码块后面不用编写;了JS重的代码块,只有分组的作用,没有其他的用途,比如,在代码块中声明变量仍然可以使用

条件判断语句:if语句

  • 流程控制语句:使程序可以根据一定的条件来选择执行
  • 语句的分类:
    1.条件判断语句
    2.条件分支语句
    3.循环语句
    • if语句与c语言相同
    • if else与c语言相同
    • if else if else if(这里想写多少都可以,值为true,执行当前语句,值为false,继续向下判断)与c相同 else该语句中,只会有一个代码块被执行,一旦代码块执行,则直接执行语句注意:写条件时不要从小到大写,这样后面的都会成为无效代码

条件分支语句:switch语句

  • 记得加break,必须全等,字符和数字的话就不会执行
  • 如果所有的比赛结果都为false,则执行default后的语句

while循环

//向页面中输出连续的数字
document.write(1+"<br/>");//页面中换行,br标签
document.write(2);
  • 与c语言相同
  • 死循环
  • 该循环不会停止,除非浏览器关闭,死循环在开发中慎用
  • 可以用break来终止循环

do while循环

do{
语句
}while(条件);

与c语言相同

for循环

  • 与c语言相同
  • 水仙花数153=1^3 + 5^3 +3^3

嵌套的for循环

  • 与c相同

break和continue

break
  • break关键字可以用来退出switch和循环语句
  • if里面不能使用
  • break只对离他最近的循环进行终止
  • 可以为循环语句创建一个lable,来表示当前的循环
    lable:循环语句,使用break时,可以在break后面跟一个lable,这样break将会结束指定的循环,而不是最近的
outer:
for(var i=0;i<5;i++){
   console.log("外层循环"+i);
   for(var j=0;j<5;j++){
       break outer;
       console.log("内层循环"+j);
       }
 }         
continue
  • 关键字,跳过当次循环,也是默认只会对离他最近的循环起作用
  • lable也可用
  • console.time(“计时器的名字”)可以用来开启一个计时器,他需要一个字符串作为参数,这个字符串将会作为计时器的标识
    console.time(“test”);
  • console.timeEnd()用来停止一个计时器,需要一个计时器的名字作为参数
    console.timeEnd(“test”);

对象的简介

  • string 字符串
    Number 数值
    Boolean 布尔值
    Null 空值
    undefined 未定义
    Object 对象
    其中 string Number Boolean Null undefined 属于基本数据类型,以后我们看到的值只要不是上面的五种,全都是对象
    而Object属于引用数据类型

  • 基本数据内型都是单一的值"hello" 123,值和值之间没有任何的联系

  • 在JS中表示一个人的信息(name gender age)
    var name = “孙悟空”;
    var gender = “男”;
    var age = 18;
    如果使用基本数据类型的数据,我们所创建的变量都是独立,不能成为一个整体

  • 对象属于一种复合的数据类型,在对象中可以保存多个不同数据类型的属性。

  • 对象的分类:
    1.内建对象
    - 由ES标准中定义的对象,在任何的ES中都可以使用
    - 比如:Math string number boolean function object…

    2.宿主对象
    - 由JS运行环境提供的对象,目前来讲主要是浏览器提供的对象
    - 比如:BOM(浏览器对象模型) DOM(文档对象模型)

    3.自定义对象
    - 由开发人员自己创建的对象

对象的基本操作

创建对象
  • 使用new关键字调用的函数,是构造函数constructor
  • 构造函数是专门用来创建对象的函数
  • 使用typeof检查一个对象时,会返回object
var obj = new Object();
console.log(typeof obj);object
  • 在对象中保存的值称为属性
  • 向对象添加属性
    语法:对象,属性名 = 属性值
// 向obj中添加一个name属性
obj.name = "name";
// 向obj中添加一个gender属性
obj.gender = "男";
// 向obj中添加一个age属性
obj.age = 18;
  • 读取对象中的属性
    语法:对象.属性名

console.log(obj.gender);

  • 如果读取对象中没有的数性,不会报错而是会返回undefined

console.log(obj.hello); undefined

  • 在对象中保存的值称为属性

  • 向对象中添加属性
    语法:对象.属性名 = 属性值

//向对象中添加一个name属性
obj.name = "孙悟空";
属性名:

对象的属性名不强制要求遵守标识符的规范,什么乱七八糟的名字都可以使用,但是我们使用还是尽量按照标识符的规范去做

obj.var = "hello";

如果要使用特殊的属性名,不能采用.的方式来操作,需要使用另一种方式;语法:对象[“属性名”] = 属性值

读取时也要采用这种形式

obj["123"] = 789;
console.log(obj.123);报错
console.log(obj["123"]);
  • , [] new优先级最高

  • 使用[]这种形式去操作属性,更加的灵活。在[]中可以直接传递一个变量,这样变量值是多少就会读取那个属性

obj["123"] = 789;
var n = "123";
console.log(obj[n]);789
属性值
  • JS对象的属性值,可以是任意的数据类型,甚至也可以是一个对象
obj.test = true;
obj.test = null;
obj.test = undefined;
//创建一个对象
var obj2 = new Object();
obj.name = "孙悟空";
//将obj2设置为obj的属性
obj.test = obj2;
console.log(obj.test.name);猪八戒
in运算符
  • 通过该运算符可以检查一个对象中是否含有指定的属性,如果有则返回true,没有则返回false
  • 语法:“属性名” in 对象
//检查obj中是否含有test2属性
console.log("test2" in obj);false
console.log("name" in obj);true

基本数据类型和引用数据类型

基本数据类型
     string 字符串
    Number 数值
    Boolean 布尔值
    Null 空值
    undefined 未定义
    Object  对象
var a = 123;
var b = a;
a++;
console.log("a = "+a);124
console.log("b = "+b);123
引用数据类型
        Object        
var obj = new Object();
obj.name = "孙悟空";
var obj2 = obj;
obj.name = "猪八戒";
console.log(obj.name);猪八戒
console.log(obj2.name);猪八戒
  • JS中的变量都是保存到栈内存中的
  • 基本数据类型的值直接在栈内存中存储,值与值之间是独立存在,修改一个变量不会影响其他的变量
  • 对象是保存在堆内存中的,每创建一个新的对象,就会在堆内存中开辟出一个新的空间,而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是一个同一个对象引用,当通过一个变量修改属性时,另一个也会受到影响
  • 修改为null的话不影响,自己断开,别人还指向地址
var obj = new Object();
obj.name = "孙悟空";
var obj2 = obj;
obj.name = "猪八戒";
//设置obj2为null
console.log(obj);object
//修改为null的话不影响,自己断开,别人还指向地址
console.log(obj2);null
  • 当比较两个基本数据类型的值时,就是比较值,而比较两个引用数据内型时,他是比较的对象的内存地址,如果两个对象是一模一样的,但是地址不同,他也会返回false
var c = 10;
var d = 10;
console.log(c  == d);true

var obj3 = new Object();
var obj4 = new Object();
obj3.name = "沙和尚";
obj4.name = "沙和尚";
console.log(obj3  == obj4);false

对象字面量

  • 以前创建一个对象

var obj = new Object();

  • 使用对象字面量来创建一个对象
var obj = {};
obj.name = "孙悟空";
console.log(obj.name);孙悟空
  • 使用对象字面量,可以在创建对象时,直接指定对象中的属性
  • 语法:{属性名:属性值,属性名:属性值…}
    对象字面量的属性名可以加引号,也可以不加,建议不加,如果要使用一些特殊的名字,则必须加引号:“#@@#@32”
    var obj2 = {name:"猪八戒",age:28};可以在逗号之后加换行,更加清晰
  • 属性名和属性值是一组一组的名值对结构,名和值之间使用:连接,多个名值对之间使用,隔开,如果一个属性之后没有其他的属性了,就不要写,
var obj2 = {name:"猪八戒",
            age:28,
            gender:"男",
            test:{name:"沙和尚"}
            };
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值