JavaScript

///定义变量  变量类型 变量名 = 变量值;
var num =1;
const name = "logteng ";
// alert(num);
// alert(name);
//2.条件控制
        const score=70;
        if (score>70&&score<=80){
            alert("优秀")
        }else if (score>60&&score<=70){
            alert('及格')
        }else{
            alert('不及格')
        }
        //console.log(score)浏览器控制台打印变量

        /*
        * 多行注释
        * */

数据类型

**3.数据类型**
文本,数值,图形,音频,视频....
//js不区分小数和整数
**number**
123//整数123
123.3//浮点数
//科学计数法
-99//负数
NaN  //not a number不是数值
Infinity //表示无限大
**字符串**
'abc' "abc"
**布尔值**
true false
**逻辑运算

比较运算符
=
==   等于(类型不一样,值一样,也会判断为true)
===  绝对等于(类型一样,值一样,结果为true)
须知
NaN与所有的值不相等
只能通过isNaN来判断**

浮点数问题

console.log((1/3)===(1-2/3))

尽量避免使用浮点数运算,存在精度问题

math.abs((1/3)-(1-2/3))<0.0000001

null和undefine

  • null 空
  • undefine 未定义

数组

Java数组必须是相同类型的对象,Js中不需要这样

//保证代码可读性,尽量使用[]
const arr = [1,2,3,'hello',"helloworld"]

去数组下标,如果越界,就会undefine

对象

对象是大括号{},数组是中括号[]

每个属性中间用逗号隔开,最后一个不需要

//Person person = new Person();
const person={
            name : '张三',
            age : 3,
            tags:['js','java','web','...']

        }
/*
person.name
>'张三'
person.tags
>['js', 'java', 'web', '...']
0: "js"
1: "java"
2: "web"
3: "..."
length: 4
    * */

严格检查模式

规范:es6

<script>
        // 严格检查模式'use strict';
        //预防JavaScript的随意性导致的问题
        //局部变量使用let 去定义
        //必须写在JavaScript语法快下第一行
        'use strict';
       let i = 1

    </script>

数据类型

[字符串]

字符串

  1. 正常的字符串我们使用单引号,或者双引号包裹
  2. 注意转义字符\
\'
\n 换行
\t tab
\u####  Unicode字符
\x41   Ascll字符
  1. 多行字符编写
// tab上面 esc下面
	        let msg=`
	        hello
	        world
	        nihaoya
	        你好
	        `
  1. 模板字符串
letname='老秦';
letage= 18;
letmsg22=`你好呀 ,${name},${age}`
console.log(msg22)
// >1 你好呀 ,老秦,18
  1. 字符串长度
str.length
  1. 字符串的不可可变性,不可变
  2. 大小写转换
//注意,这里是方法,不是属性
console.log(msg.toUpperCase())//转换成大写
console.log(msg.toLowerCase())//转换成小写
  1. indexof 获取指定字符的位置
  2. substring
[...)
xxx.substring(1)//从第一个字符串截取到最后一个字符串
xxx.substring(1,3)//[1,3)

[数组]

数组

array可以包含任意的数据类型

var arr = [1,2,3,4,5,6]
arr[0]
arr[0]=1
  1. 长度
arr.length

注意:假如给arr.length赋值,数组大小就会发生,如果赋值国小,元素就会丢失

  1. indexOf,通过元素获得下标索引
arr.indexOf(2)
1

字符串的1和数字1 是不同的

  1. slice()截取arrayde一部分,返回一个新数组,类似于String中的substring
  2. push,pop
push:压入到尾部
pop:弹出尾部的一个元素
  1. unshift(),shift() 头部
unshift():压入到头部
shift():弹出头部的一个元素
  1. 排序用sort()
  2. 元素反转reverse()
var arr =['c','b','a']
arr.reverse()
(3) ['a', 'b', 'c']
  1. concat()

注意:这个方法没有修改数组,返回了一个新的数组

var arr =['c','b','a']
arr.concat('4','r')
(5) ['c', 'b', 'a', '4', 'r']
  1. 连接符join

打印拼接数组,使用特定的字符串连接

var arr =['c','b','a']
arr.join('-')
'c-b-a'
  1. 多维数组
arr = [[1,2],[3,4],["5","6"]]
0: (2) [1, 2]
1: (2) [3, 4]
2: (2) ['5', '6']
  1. fill 填充数组

数组:存储数据(存,取)

[对象]

对象

若干个键值对

var 对象名={
属性名:属性值,
属性名:属性值,
属性名:属性值
}
//定义一个person对象,他拥有四个对象
var person={
           name:"狂神",
           age:18,
           email:"20190101@gmail.com",
           score:0,
       }
/*person
{name: '狂神', age: 18, email: '20190101@gmail.com', score: 0}
age: 18
email: "20190101@gmail.com"
name: "狂神"
score: 0*/

js中队象,{….}表示一个对象,键值对描述属性,xxxx:xxxx,多个属性之间使用逗号隔开,左后一个属性不加逗号!

javaScript中的所有的键都是字符串,值是任意对象

  1. 对象赋值
person.name='张三'
>'张三'
person.name
>'张三'
  1. 使用一个不存在的对象属性,不会报错!undefine
person.kk
>undefined
  1. 动态删减属性
delete person.name
>true
<person
//#################
{age: 18, email: '20190101@gmail.com', score: 0}
age: 18
email: "20190101@gmail.com"
score: 0
  1. 动态的添加,直接给新的属性添加值即可
person.hh='哈哈'
'哈哈'
//################
{age: 18, email: '20190101@gmail.com', score: 0, hh: '哈哈'}
age: 18
email: "20190101@gmail.com"
hh: "哈哈"
score: 0
  1. 判断属性值是否在这个对象中! xxx in xxx!
age in person
VM500:1 Uncaught ReferenceError: age is not defined
    at <anonymous>:1:1
//#################
'age' in person
true
//##########
toString in person
false
//继承
'toString' in person
true
  1. 判断一个属性是否是这个对象自身拥有hasOwnProperty
person.hasOwnProperty('toString')
false

person.hasOwnProperty('age')
true

流程控制

  1. forEach

5.1

var age = [12,12,12,1,3,54,564,6,4,65];
//函数
       age.forEach(function (value) {
           console.log(value)
       })
  1. for …in
var age = [12,12,12,1,3,54,564,6,4,65];
        for (const ageKey in age) {
            console.log(age[ageKey])
        }

[Map和Set]

Map和Set

Map:

const map= new Map([['tom',100],['jack',90],['haha',70]])

const  name = map.get('tom');//通过key获取value
map.set('admin',20) //新增或修改
console.log(name)
map.delete('tom')//删除

Set:无序不重复的集合

const set = new Set([3,1,1,1,1])//set可以去重
//##########
/*Set(2) {3, 1}
[[Entries]]
0: 3
1: 1*/
set.add(2)//添加
set.delete(1)//删除
set.has(3) //是否包含某个元素

iterator

遍历数组

遍历map

遍历set

//通过for of /for in下标
var arr = [3,4,5]
for (var x of arr){
console.log(x)
}

函数

方法:对象(属性,方法)

函数:

  1. 定义函数
public 返回值类型 方法名(){
return 返回值;
}

绝对值函数

function abs(x){
if(x>0){
return x;
}else{
return -x;
}
}
//#########
abs(-10)
10

一旦执行到return 代表函数结束,返回结果

如果没有执行return,函数执行完也会返回结果,结果为undefine

var abs = function(x){

}

function(x){……}这是一个匿名函数.但可以把结果赋值给abs,通过abs就可以调用函数

abs(10)
abs(-10)

参数问题:JavaScript可以传递任意个参数,也可以不传递参数

参数进来是否存在的问题?假设不存在规避

function abs(x){
            if(typeof x !=='number'){
//手动抛出异常
                throw 'Not a number';
                //Uncaught Not a number
            }

            if(x>0){
                return x;
            }else{
                return -x;
            }
        }

参数存在多个

arguments是一个赠送的关键字

代表传递进来的所有参数,是一个数组~~~

**function abs(x){
            for (let j = 0; j < arguments.length; j++) {
                console.log(arguments[j]);
            }
            if(x>0){
                return x;
            }else{
                return -x;
            }
        }**

问题:argument 包含所有的参数,在使用多余的参数来进行附加操作时需要排除已有的参数

rest

es6引入的新特性,获取除了已经定义的参数之外的参数

function aaa(a, b, ...rest) {
            console.log(a)
            console.log(b)
            console.log(rest)

        }

        /*aaa(2,4,66,6,6)
       a: 2
        b:4
         [66, 6, 6]
 */

rest参数只能写在最后面,用…rest标识

版权声明:本文为tendyears原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/tendyears/p/16252912.html