《Javascript 高级程序设计(第三版)》笔记0x2 JavaScript基本概念(1)

本文深入讲解JavaScript中的数据类型,包括基本类型如Undefined、Null、Boolean、Number和String,以及复杂类型Object。探讨了数据类型的特性、数值范围、NaN概念、字符串特点及对象的属性和方法。

目录

语法

变量

数据类型

    typeof:

    Undefined类型

     Null类型

    Boolean类型

    Number类型

    浮点数值

    数值范围 

    NaN

    数值转换

    String类型

      字符字面量

      字符串的特点

      转换为字符串

    Object类型


  • 语法

  1. 区分大小写
  2. 标识符:首字符为字母、下划线或美元符,惯用驼峰命名(首字母小写,其余单词首字母大写)
  3. 注释 
//单行注释
/*
*    多行
*/

     4. 严格模式(strict mode)

        严格模式是为 JavaScript 定义了一种不同的解析与执行模型。在严格模式下, ECMAScript 3 中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误。

function doSomething(){
    "use strict";
    //函数体
}
  • 变量

        松散类型,可以用来保存任何类型的数据。

var message;
message = “hello world”;
var num=10;
//用 var 操作符定义的变量将成为定义该变量的作用域中的局部变量。

//可以像下面这样省略 var 操作符,从而创建一个全局变量
function test(){
    message = "hi"; // 全局变量
}
test();
alert(message); // "hi"

//可以使用一条语句定义多个变量
var message = "hi",
    found = false,
    age = 29;
  • 数据类型

        基本数据类型:Undefined、Null、Boolean、Number和 String

        复杂数据类型:Object(本质上是由一组无序的名值对组成的)

    typeof:

        检测给定变量的数据类型,返回值有:"undefined"、"boolean"、"string"、"number"、"object"、"function"。

var message = "some string";
alert(typeof message); // "string"
alert(typeof(message)); // "string"
alert(typeof 95); // "number"
//注意,typeof 是一个操作符而不是函数

    Undefined类型

        Undefined 类型只有一个值,即特殊的 undefined。

var message;
alert(message == undefined); //true

var message; // 这个变量声明之后默认取得了 undefined 值
// 下面这个变量并没有声明
// var age
alert(typeof message); // "undefined"
alert(typeof age); // "undefined"

     Null类型

        只有一个值的数据类型,这个特殊的值是 null,表示一个空对象指针

var car = null;
alert(typeof car); // "object"

//undefined 值是派生自 null 值的,因此 ECMA-262 规定对它们的相等性测试要返回 true:
alert(null == undefined); //true

    Boolean类型

        ECMAScript 中使用得最多的一种类型,有两个字面值: true 和 false(区分大小写)

    虽然 Boolean 类型的字面值只有两个,但 ECMAScript 中所有类型的值都有与这两个 Boolean 值等价的值。

数据类型及转换规则
数据类型转换为true的值转换为false的值
Booleantruefalse
String任何非空字符串""(空字符串)
Number任何非零数字值(包括无穷大)0和NaN
Object任何对象null
Undefinednot applicableundefined

 

//强制转换
var message = "Hello world!";
var messageAsBoolean = Boolean(message);
//自动转换
var message = "Hello world!";
if (message){
    alert("Value is true");
}

    Number类型

        使用 IEEE754 格式来表示整数和浮点数值

var intNum = 55; // 整数

var octalNum1 = 070; // 八进制的 56
var octalNum2 = 079; // 无效的八进制数值——解析为 79
var octalNum3 = 08; // 无效的八进制数值——解析为 8

var hexNum1 = 0xA; // 十六进制的 10
var hexNum2 = 0x1f; // 十六进制的 31
//在进行算术计算时,所有以八进制和十六进制表示的数值最终都将被转换成十进制数值。

    浮点数值

var floatNum1 = 1.1;
var floatNum2 = 0.1;
var floatNum3 = .1; // 有效,但不推荐

var floatNum1 = 1.; // 小数点后面没有数字——解析为 1
var floatNum2 = 10.0; // 整数——解析为 10

var floatNum = 3.125e7; // 等于 31250000

浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数。例如, 0.1 加 0.2的结果不是 0.3,而是 0.30000000000000004。

    数值范围 

        Number.MIN_VALUE 5e-324
        Number.MAX_VALUE 1.7976931348623157e+308
        -Infinity(负无穷)
        Infinity(正无穷) 

//判断是否无穷,是返回false
var result = Number.MAX_VALUE + Number.MAX_VALUE;
alert(isFinite(result)); //false

    NaN

        Not a Number

alert(isNaN(NaN)); //true,注意NaN不等于任何值,包括NaN
alert(isNaN(10)); //false( 10 是一个数值)
alert(isNaN("10")); //false(可以被转换成数值 10)
alert(isNaN("blue")); //true(不能转换成数值)
alert(isNaN(true)); //false(可以被转换成数值 1)

    数值转换

        Number()、 parseInt()和 parseFloat()。第一个函数,即转型函数 Number()可以用于任何数据类型,而另两个函数则专门用于把字符串转换成数值。

/*---------------------------Number()------------------------------------------------*/
var num1 = Number(true); //1

var num2 = Number(11); //11

var numVar = null;
var num3 = Number(numVar); //0

var num4 = Number(undefined);//NaN

var num5 = Number("001"); //1
var num6 = Number("1.1"); //1.1
var num7 = Number("0xa"); //10
var num8 = Number(""); //0
var num9 = Number("Hello world!"); //NaN
/*如果是对象,则调用对象的 valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是 NaN,则调用对象的 toString()方法,
然后再次依照前面的规则转换返回的字符串值
*/
/*---------------------------parseInt()------------------------------------------------*/
var num1 = parseInt("1234blue"); // 1234
var num2 = parseInt(""); // NaN
var num3 = parseInt("0xA"); // 10(十六进制数)
var num4 = parseInt(22.5); // 22
var num5 = parseInt("070"); // 56(八进制数)
var num6 = parseInt("70"); // 70(十进制数)
var num7 = parseInt("0xf"); // 15(十六进制数)

//解决进制分歧
var num1 = parseInt("AF", 16); //175
var num2 = parseInt("AF"); //NaN

var num1 = parseInt("10", 2); //2 (按二进制解析)
var num2 = parseInt("10", 8); //8 (按八进制解析)
var num3 = parseInt("10", 10); //10 (按十进制解析)
var num4 = parseInt("10", 16); //16 (按十六进制解析)
/*---------------------------parseFloat()----------------------------------------------*/
var num1 = parseFloat("1234blue"); //1234 (整数)
var num2 = parseFloat("0xA"); //0
var num3 = parseFloat("22.5"); //22.5
var num4 = parseFloat("22.34.5"); //22.34
var num5 = parseFloat("0908.5"); //908.5
var num6 = parseFloat("3.125e7"); //31250000

    String类型

        String 类型用于表示由零或多个 16 位 Unicode 字符组成的字符序列,即字符串。

var firstName = "Nicholas";
var lastName = 'Zakas';

      字符字面量

字符字面量
字面量含义
\n换行
\t制表
\b空格
\r回车
\f进纸
\\斜杠
\'单引号('),在用单引号表示的字符串中使用。例如: 'He said, \'hey.\''
\"双引号("),在用双引号表示的字符串中使用。例如: "He said, \"hey.\""
\xnn以十六进制代码nn表示的一个字符(其中n为0~F)。例如, \x41表示"A"
\unnnn以十六进制代码nnnn表示的一个Unicode字符(其中n为0~F)。例如, \u03a3表示希腊字符Σ
var text = "This is the letter sigma: \u03a3.";
alert(text.length); // 输出 28

      字符串的特点

ECMAScript 中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。

var lang = "Java";
lang = lang + "Script";
/*首先创建一个能容纳 10 个字符的新字符串,然后在这个字符串中填充"Java"和"Script",
最后一步是销毁原来的字符串"Java"和字符串"Script"*/

      转换为字符串

var age = 11;
var ageAsString = age.toString(); // 字符串"11"
var found = true;
var foundAsString = found.toString(); // 字符串"true"

/*按不同进制数*/
var num = 10;
alert(num.toString()); // "10"
alert(num.toString(2)); // "1010"
alert(num.toString(8)); // "12"
alert(num.toString(10)); // "10"
alert(num.toString(16)); // "a"

var value1 = 10;
var value2 = true;
var value3 = null;
var value4;
alert(String(value1)); // "10"
alert(String(value2)); // "true"
alert(String(value3)); // "null"
alert(String(value4)); // "undefined"

    Object类型

ECMAScript 中的对象其实就是一组数据和功能的集合。对象可以通过执行 new 操作符后跟要创建的对象类型的名称来创建。Object 类型所具有的任何属性和方法也同样存在于更具体的对象中。

      Object 的每个实例都具有下列属性和方法

        constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)就是 Object()。
        hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例如: o.hasOwnProperty("name"))。
        isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型。
        propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用 for-in 语句来枚举。与 hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定。
        toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
        toString():返回对象的字符串表示。
        valueOf():返回对象的字符串、数值或布尔值表示。通常与 toString()方法的返回值相同。

内容概要:本文介绍了一个基于多传感器融合的定位系统设计方案,采用GPS、里程计和电子罗盘作为定位传感器,利用扩展卡尔曼滤波(EKF)算法对多源传感器数据进行融合处理,最终输出目标的滤波后位置信息,并提供了完整的Matlab代码实现。该方法有效提升了定位精度与稳定性,尤其适用于存在单一传感器误差或信号丢失的复杂环境,如自动驾驶、移动采用GPS、里程计和电子罗盘作为定位传感器,EKF作为多传感器的融合算法,最终输出目标的滤波位置(Matlab代码实现)机器人导航等领域。文中详细阐述了各传感器的数据建模方式、状态转移与观测方程构建,以及EKF算法的具体实现步骤,具有较强的工程实践价值。; 适合人群:具备一定Matlab编程基础,熟悉传感器原理和滤波算法的高校研究生、科研人员及从事自动驾驶、机器人导航等相关领域的工程技术人员。; 使用场景及目标:①学习和掌握多传感器融合的基本理论与实现方法;②应用于移动机器人、无人车、无人机等系统的高精度定位与导航开发;③作为EKF算法在实际工程中应用的教学案例或项目参考; 阅读建议:建议读者结合Matlab代码逐行理解算法实现过程,重点关注状态预测与观测更新模块的设计逻辑,可尝试引入真实传感器数据或仿真噪声环境以验证算法鲁棒性,并进一步拓展至UKF、PF等更高级滤波算法的研究与对比。
内容概要:文章围绕智能汽车新一代传感器的发展趋势,重点阐述了BEV(鸟瞰图视角)端到端感知融合架构如何成为智能驾驶感知系统的新范式。传统后融合与前融合方案因信息丢失或算力需求过高难以满足高阶智驾需求,而基于Transformer的BEV融合方案通过统一坐标系下的多源传感器特征融合,在保证感知精度的同时兼顾算力可行性,显著提升复杂场景下的鲁棒性与系统可靠性。此外,文章指出BEV模型落地面临大算力依赖与高数据成本的挑战,提出“数据采集-模型训练-算法迭代-数据反哺”的高效数据闭环体系,通过自动化标注与长尾数据反馈实现算法持续进化,降低对人工标注的依赖,提升数据利用效率。典型企业案例进一步验证了该路径的技术可行性与经济价值。; 适合人群:从事汽车电子、智能驾驶感知算法研发的工程师,以及关注自动驾驶技术趋势的产品经理和技术管理者;具备一定自动驾驶基础知识,希望深入了解BEV架构与数据闭环机制的专业人士。; 使用场景及目标:①理解BEV+Transformer为何成为当前感知融合的主流技术路线;②掌握数据闭环在BEV模型迭代中的关键作用及其工程实现逻辑;③为智能驾驶系统架构设计、传感器选型与算法优化提供决策参考; 阅读建议:本文侧重技术趋势分析与系统级思考,建议结合实际项目背景阅读,重点关注BEV融合逻辑与数据闭环构建方法,并可延伸研究相关企业在舱泊一体等场景的应用实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值