zoukankan      html  css  js  c++  java
  • JavaScript之基础语法整理

    1.数据类型(number,boolean,string,null,undefined,symbol,object)

    es是动态语言,弱类型语言,虽然先声明了变量,但是变量可以重新赋值任意类型
    弱类型,不需要强制类型转换,会隐士转换类型
    Nan:not a number转换数字失败
    总结:
    1。遇到字符串,+号就是拼接字符串,所有非字符串隐士转换为字符串
    2。如果没有字符串,加号把其他所有类型都当作字符串处理,非数字类型隐式转换为数字,undefined特殊,因都没有定义值。所以事一个特殊数字Nan
    3。如果运算符事逻辑运算符,短路符,返回就是短路时的类型,没有隐士转换
    ++和--
    单目运算符,代表变量自增,自减
    i++先用i,用完之后i在自增加1
    ++i ,i先自增,在使用i
    单目运算符优先级高于双目运算符
    
    三元运算符:
    条件表达式?真值:假值
    
    逗号操作符
    js运行多个表达式写在一起
    
    比较运算符
    console.log(300 == '300') //true 宽松比较
    console.log(300==='300')//false 严格比较
    使用宽松比较时,尽可能确保比较的类型相同,否则会引起隐士转换,隐士转换的规则不好把控
    不知道类型是否一致,但是一定要相等,请使用===,!==
    
    instanceof:判断是否指定类型
    typeof:返回类型字符串
    delete:删除一个对象(an object)或一个对象的属性,或者一个数组中的某个键值
    in:如果指定的属性在对象内,则返回true
    var a = new String('b')
    console.log(a instanceof String) //true
    console.log(typeof(a)) //obhect
    console.log(String instanceof Object) //true
    console.log(typeof(String)) //function
    
    var trees = new Array('rebwood','bay','cedar','ok','maple')
    console.log(0 in trees) //数组的索引
    console.log('length' in trees) //true ,对象属性返回true  

    2.生成器表达式

    function *inc()
    {
        let i = 0
        let j = 7
        while (true){
            yield i++
            if (!j--) return 100
        }
    }
    gen = inc()
    for (i=0;i<10;i++)
    {
        console.log(gen.next())
    }
    /*
    { value: 0, done: false }
    { value: 1, done: false }
    { value: 2, done: false }
    { value: 3, done: false }
    { value: 4, done: false }
    { value: 5, done: false }
    { value: 6, done: false }
    { value: 7, done: false }
    { value: 100, done: true }
    { value: undefined, done: true }
    每次调用next()方法返回一个对象,这个对象包括2个属性value和done
    values属性标识yield的返回值,done表示bool类型,done事false表示还有yield要执行
    如果执行完或者return后done变成true
    */

     3.控制语句

    js使用大括号构成语句块
    es6之前语句块没有作用域的,从es6开始支持作用域,let只能在块的作用域内可见
    
    function hello(){
        let a = 1
        var b = 2
        c = 3
    }
    if (1){
        let d = 4
        var e = 5
        f = 6
        if (true){
            console.log(d) //4 上层变量对下层可见
            console.log(e) //5
            console.log(f) //6
            g = 10
            var h = 11
        }
    }
    // console.log(a) //不可见
    // console.log(b) //不可见
    // console.log(c) //不可见
    // console.log(d) //不可见
    console.log(e) //var可见
    console.log(f) //隐士声明,可见
    console.log(g)
    console.log(h)

     流程控制

    if (cond1){
        pass
    }
    else if (cond2){
        pass
    }
    else{
    
    }
    /*
    条件的false等效
    false,undefined,null ,0,Nan '',空数组,空对象
    */
    switch (expression){
        case label_1:
            statements_1
            [break]
        case label_2:
            statement_2
            [break]
        default:
            statements_def
            [break]
    }
    /*
    break可选,引出穿透问题,一定要在适当的case中使用break,否则匹配case后
    会继续向下执行
    */
    for(let i=0;i<10;i++){
        console.log(i)
    }
    
    for (var x=0,y=9;x<10;x++,y--){
        console.log(x*y)
    
    }
    for (let i=0;i<10;i+=3){
        console.log(i)
    }
    let x = 10
    while (x--){
        console.log(x)
    }
    //条件满足,进入循环,条件为真继续循环
    
    do{
        console.log(x)
    }while(x++<10)
    //先进入循环,然后判断,为真就继续循环

    for,,,,in循环

    let arr = new Array(10,20,30,40)
    
    for (let x in arr){
        console.log(x) //返回索引
    }
    
    for (let index in arr){
        console.log(`${index}:${arr[index]}`) //插入值返回value
    }
    let obj = {
        a:1,
        b:'python',
        c:true
    }
    // console.log(obj.c)
    // console.log(obj['a'])
    for (let x in obj){
        console.log(x) //return key
    }
    for (let key in obj)
    {
        console.log(`${key}:${obj[key]}`)//return key:valye
    }
    let arr = [1,2,3,4,5]
    let obj = {
        a:1,
        b:'python',
        c:true
    }
    
    for (let x of arr){
        console.log(x)
    }
    
    for (let key of obj){
        console.log(key) //异常不可以迭代字典
    }
    本文为原创文章,转载请标明出处
  • 相关阅读:
    ISAPI_Rewrite应用技巧与方法
    Linux下MONO执行C#程序
    正则表达式与 re 模块[转]
    网页自适应不同浏览器和分辨率[转]
    DIV 元素 | div 对象(4)
    自适应浏览器分辨率的javascript函数[转]
    常用正规表达式
    div置顶且屏蔽底下图层的图层
    IIS连接数
    什么是RIA?
  • 原文地址:https://www.cnblogs.com/harden13/p/9252789.html
Copyright © 2011-2022 走看看