JavaScript与Object C的区别

1.JavaScript 拥有动态类型。JavaScript的变量类型可以随意切换
若你给他赋值为数字,再次给它一个字符串,它以最后一次的类型为准是字符类型。而Object C要严格的多,这样它会报错的

length = 6
length = 'ddd'
var x = 5 + 6;var y = x * 10;
// document.write(16 + "Volvo")
document.write(length)

2.JavaScript的对象十分简洁,用花括号括起来的一堆键值对。和Object C 的字典稍有不同,Object C的字典的值必须是字符串或对象,并且数字不属于对象。而JavaScript却把数字认为是number类型可以当键值对的值。若Object C进行json解析不进行对象转换,直接把number当字符串使用很容易闪退。
可以说 “JavaScript 对象是变量的容器”。
但是,我们通常认为 “JavaScript 对象是键值对的容器”。
键值对通常写法为 name : value (键与值以冒号分割)。
键值对在 JavaScript 对象通常称为 对象属性。
Object C的对象不是键值对的容器而是变量的容器。因为它的类通常放在.h文件中先声明属性(变量),在.m文件中实现它的方法,在方法中操作其它的对象,然后在其它方法中根据类生成对象。而JavaScript完全简化为一行代码搞定了。😊
3.JavaScript的Number(var x= new Number;),number是类型的值((typeof(3) == ‘number’))
4.JavaScript的函数需要用function修饰,Object C不需要,但是要声明返回类型(-(void)或+ (UIImage *))。
5.如果您把值赋给尚未声明的变量,该变量将被自动作为 window 的一个属性。Object C的变量必须显示性的声明。

var var1 = 1; // 不可配置全局属性
var2 = 2; // 没有使用 var 声明,可配置全局属性console.log(this.var1); // 1
console.log(window.var1); // 1
console.log(window.var2); // 2delete var1; // false 无法删除
console.log(var1); //1delete var2; 
console.log(delete var2); // true
console.log(var2); // 已经删除 报错变量未定义

6.在 JavaScript 中, 对象和函数同样也是变量。
在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。
JavaScript 函数作用域: 作用域在函数内修改。
Object C的类是相当于c语言的结构体的增强版,在其它类的方法中根据类生成对象。JavaScript完全简化了它的实现。
7.在函数中没有用var声明变量但是赋值过,在外部也没有声明,在外面直接调用它会报错,用window.访问该变量会报undefined
function myFunction2(name,job){
return ("Welcome " + name + ", the " + job);
carName = “Volvo”;
}
document.getElementById(“demo”).innerHTML=myFunction2(‘I’, ‘Jhone’);
// document.getElementById(“demo”).innerHTML=carName;
// alert(carName);//Uncaught ReferenceError ReferenceError: carName is not defined
alert(window.carName);//undefined
8.在 JavaScript 中,=== 为绝对相等,即数据类型与值都必须相等
9.JavaScript 中的模板字符串是一种方便的字符串语法,允许你在字符串中嵌入表达式和变量。
模板字符串使用反引号 `` 作为字符串的定界符分隔的字面量。
模板字面量是用反引号()分隔的字面量,允许多行字符串、带嵌入表达式的字符串插值和一种叫带标签的模板的特殊结构。 英文模式下+数字键盘1左边的键。就可以直接打出反引号
10.在JavaScript中,let(const)是一个关键字,用于声明一个块级作用域的局部变量。块级作用域是由一对花括号 {} 界定的任何代码块,例如一个函数、一个循环体或者一个条件语句块。
块级作用域:let(const)声明的变量仅在声明它们的块或子块中可用。
不存在变量提升:(相反的var声明的变量会被提升到其包含作用域的顶部),const与let一样,const声明的变量不会被提升到其包含作用域的顶部。在声明之前引用let(const)变量会导致引用错误。
暂时性死区(Temporal Dead Zone,TDZ):let(const)声明的变量存在于从块的开始到声明之间的暂时性死区中。在TDZ中,访问这些变量会引发错误。
只读属性:const声明的变量不能重新赋值。这意味着一旦一个变量被const声明,它的值就不可改变。
对于对象和数组:虽然const声明的对象和数组本身不能重新赋值,但是对象的属性和数组的元素可以修改。
重复声明限制:在同一个作用域内,let(const)不允许重复声明同一个变量,而var可以。
11.如果数字与字符串相加,返回字符串
12.在JavaScript中,数组可以越界访问只是值为空。Object C数组越界访问就会crash,并且抛异常是try catch也没有用,app直接退出,所以它很少用try catch。同时Object C主要需要保证不抛异常,要进行各种防范,一旦抛异常一般神仙也难救。也不是所有的try catch都没有用,我见到一个UILart弹窗,有时候app开启时闪退,用try catch就避免了闪退,这样的很少。Object C一直时各种判断尽量避免闪退,解决闪退的根本方法除了纠正各种错误的逻辑,其次是尽量进行各种判断避免抛异常。逻辑错误是我们尽量避免的,但是任何人都很难避免逻辑错误引起抛异常。但是我们可以通过各种判断来避免抛异常。而python和js要强壮的多,捕获异常就能避免闪退,而app基本上捕获到异常它该死还是死。语言不通决定了它的健壮性不同,对程序猿的要求也不同。

cars=["BMW","Volvo","Saab","Ford"];
var i=0;
while (cars[i])
{document.write(cars[i] + "<br>");i++;
}

13.可以对 JavaScript 语句进行标记。
如需标记 JavaScript 语句,请在语句之前加上冒号:
通过标签引用,break 语句可用于跳出任何 JavaScript 代码块:

cars=["BMW","Volvo","Saab","Ford"];
list: 
{document.write(cars[0] + "<br>"); document.write(cars[1] + "<br>"); document.write(cars[2] + "<br>"); break list;document.write(cars[3] + "<br>"); document.write(cars[4] + "<br>"); document.write(cars[5] + "<br>"); 
}

14.在 JavaScript 中 null 表示 “什么都没有”。
你可以设置为 null 来清空对象:

var
person = null;           // 值为 null(空), 但类型为对象

你可以设置为 undefined 来清空对象:

var
person = undefined;     // 值为 undefined, 类型为 undefined

null 和 undefined 的值相等,但类型不等:

typeof undefined             // undefinedtypeof null                  // objectnull === undefined           // falsenull == undefined            // true片

Object C没有undefined关键词,空为nil,只有对象类型才和nil表,数字类型不和nil比较。
15.在 JavaScript 中有 6 种不同的数据类型:
string
number
boolean
object
function
symbol
3 种对象类型:
Object
Date
Array
2 个不包含任何值的数据类型:
null
undefined
而Object C的类型要多的多。
16.constructor 属性
constructor 属性返回所有 JavaScript 变量的构造函数。

**[1,2,3,4].constructor              // 返回函数 Array()   { [native code] }
{name:'John', age:34}.constructor  // 返回函数 Object()  { [native code] }**

如果对象是 JavaScript Array 或 JavaScript Date ,我们就无法通过 typeof 来判断他们的类型,因为都是 返回 object。
可以使用 constructor 属性来查看对象是否为数组 (包含字符串 “Array”):

function isArray(myArray) {return myArray.constructor.toString().indexOf("Array") > -1;
}

17.在JavaScript中,NaN(Not a Number)是一个特殊的数值,它表示一个本来应该返回数值的操作数未返回数值的情况。NaN有几个独特的属性:
NaN不等于任何值,包括它自己。
NaN的类型是number。
因此,判断一个值是否为NaN不能简单地使用相等运算符(===),因为NaN === NaN的结果是false。相反,您可以使用Number.isNaN()函数或全局isNaN()函数。
Number.isNaN()不会对非数值类型的值进行类型转换,因此它更安全,不会因为隐式类型转换而产生意外的结果。
isNaN()会进行类型转换,这意味着它可能会对非数值类型的值返回true,即使这些值在逻辑上不是NaN。
18.当 JavaScript 尝试操作一个 “错误” 的数据类型时,会自动转换为 “正确” 的数据类型。

5 + null    // 返回 5         null 转换为 0"5" + null  // 返回"5null"   null 转换为 "null""5" + 1     // 返回 "51"      1 转换为 "1"  "5" - 1     // 返回 4         "5" 转换为 5

19.当你尝试输出一个对象或一个变量时 JavaScript 会自动调用变量的 toString() 方法

document.getElementById("demo").innerHTML = myVar;
myVar = {name:"Fjohn"}  // toString 转换为 "[object Object]"
myVar = [1,2,3,4]       // toString 转换为 "1,2,3,4"
myVar = new Date()      // toString 转换为 "Fri Jul 18 2014 09:08:55 GMT+0200"
myVar = 123             // toString 转换为 "123"
myVar = true            // toString 转换为 "true"
myVar = false           // toString 转换为 "false"

20。JavaScript 声明提升
JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。
JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。
JavaScript 只有声明的变量会提升,初始化的不会。
21.在常规的比较中,数据类型是被忽略的,以下 if 条件语句返回 true:

var x = 10;
var y = "10";
if (x == y)

在严格的比较运算中,=== 为恒等计算符,同时检查表达式的值与类型,以下 if 条件语句返回 false:

var x = 10;var y = "10";if (x === y)

这种错误经常会在 switch 语句中出现,switch 语句会使用恒等计算符(===)进行比较:
JavaScript 允许我们在字符串中使用断行语句:

var x =
"Hello World!";

字符串断行需要使用反斜杠(),如下所示:

var x = "Hello \
World!";

以下实例中,if 语句失去方法体,原 if 语句的方法体作为独立的代码块被执行,导致错误的输出结果。
由于分号使用错误,if 语句中的代码块就一定会执行:

if (x == 19);{// code block }

JavaScript 默认是在一行的末尾自动结束。
以下两个实例返回结果是一样的(一个有分号一个没有):

function myFunction(a) {var power = 10      return a * power}
function myFunction(a) {var power = 10;    return a * power;}

JavaScript 也可以使用多行来表示一个语句,也就是说一个语句是可以分行的。
以下实例返回相同的结果:

function myFunction(a) {var    power = 10;      return a * power;}

但是,以下实例结果会返回 undefined:

function myFunction(a) {varpower = 10; returna * power;
}

在 JavaScript 中,分号是可选的 。
最好别写这些奇葩的代码,正常写就行,别省去分号和乱换行,不作死不会死。为了简洁而制造bug是不可取的。
许多程序语言都允许使用名字来作为数组的索引。
使用名字来作为索引的数组称为关联数组(或哈希)。
在 JavaScript 中, 对象 使用 名字作为索引。
如果你使用名字作为索引,当访问数组时,JavaScript 会把数组重新定义为标准对象。
执行这样操作后,数组的方法及属性将不能再使用,否则会产生错误:

var person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;var x = person.length;         // person.length 返回 0var y = person[0];             // person[0] 返回 undefined

数组最后一个值的后面添加逗号虽然语法没有问题,但是在不同的浏览器可能得到不同的结果。

var colors = [5, 6, 7,]; //这样数组的长度可能为3 也可能为4。

定义对象,最后不能添加逗号

websites = {site:"菜鸟教程", url:"www.runoob.com", like:460,}

Undefined 不是 Null
在 JavaScript 中, null 用于对象, undefined 用于变量,属性和方法。
对象只有被定义才有可能为 null,否则为 undefined。
如果我们想测试对象是否存在,在对象还没定义时将会抛出一个错误。
错误的使用方式:

if (myObj !== null && typeof myObj !== "undefined") 

正确的方式是我们需要先使用 typeof 来检测对象是否已定义:

if (typeof myObj !== "undefined" && myObj !== null) 

在每个代码块中 JavaScript 不会创建一个新的作用域,一般各个代码块的作用域都是全局的。
以下代码的的变量 i 返回 10,而不是 undefined:

for (var i = 0; i < 10; i++) {// some code}return i;

Object C这样写编译不通过。可见它的语法比js严格的多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/649945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++(搜索二叉树)

目录 前言&#xff1a; 1.二叉搜索树 1.1二叉搜索树的定义 1.2二叉搜索树的特点 2.二叉搜索树的实现 2.1框架 2.2查找 2.3插入 2.4删除 1.右子树为空 2.左子树为空 3.左右都不为空 3.递归版本 3.1前序遍历 3.2中序遍历 3.3后续遍历 3.4查找&#xff08;递…

【日常学习笔记】gflags

https://mp.weixin.qq.com/s/FFdAUuQavhD5jCCY9aHBRg gflags定义的是全局变量&#xff0c;在main函数后&#xff0c;添加::gflags::ParseCommandLineFlags函数&#xff0c;就能解析命令行&#xff0c;在命令行传递定义的参数。 在程序中使用DEFINE_XXX函数定义的变量时&#x…

Ubuntu 22.04 apt 安装 ros1 ros Noetic Ninjemys

众所周知 ros2还有很多功能没有移植&#xff0c;而ros1官方不再支持 ubuntu 20.04 之后的版本。另一方面Ubuntu 22.04 更新了很多对新硬件的驱动&#xff0c;有更好的兼容性和体验&#xff0c;这就变的很纠结。 如果想在 22.04 使用最新版本的 ros noetic 只有自己编译一个办法…

HTML 曲线图表特效

下面是代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>基于 ApexCharts 的 HTML5 曲线图表DEMO演示</title><style> body {background: #000524; }#wrapper {padding-top: 20px;background: #000524;b…

编程笔记 html5cssjs 060 css响应式布局

编程笔记 html5&css&js 060 css响应式布局 一、响应式布局二、Bootstrap简介总结 CSS响应式布局是一种可以在不同设备&#xff08;例如桌面电脑、平板电脑、手机等&#xff09;上自动调整页面布局和样式的技术。 一、响应式布局 使用CSS响应式布局的关键是媒体查询&am…

Redis面试题33

当然&#xff0c;请继续提问。 什么是物联网&#xff1f;它的应用场景有哪些&#xff1f; 答&#xff1a;物联网&#xff08;Internet of Things&#xff0c;IoT&#xff09;是指通过互联网将各种物理设备、传感器和其他对象连接到一起&#xff0c;使它们能够相互交流和共享数…

第二证券:大金融板块逆势护盘 北向资金尾盘加速净流入

周一&#xff0c;A股商场低开低走&#xff0c;沪指收盘失守2800点。截至收盘&#xff0c;上证综指跌2.68%&#xff0c;报2756.34点&#xff1b;深证成指跌3.5%&#xff0c;报8479.55点&#xff1b;创业板指跌2.83%&#xff0c;报1666.88点。沪深两市合计成交额7941亿元&#xf…

WEB安全渗透测试-pikachuDVWAsqli-labsupload-labsxss-labs靶场搭建(超详细)

目录 phpstudy下载安装 一&#xff0c;pikachu靶场搭建 1.下载pikachu 2.新建一个名为pikachu的数据库 3.pikachu数据库配置 ​编辑 4.创建网站 ​编辑 5.打开网站 6.初始化安装 二&#xff0c;DVWA靶场搭建 1.下载DVWA 2.创建一个名为dvwa的数据库 3.DVWA数据库配…

EasyExcel中自定义拦截器的运用

在EasyExcel中自定义拦截器不仅可以帮助我们不止步于数据的填充&#xff0c;而且可以对样式、单元格合并等带来便捷的功能。下面直接开始 我们定义一个MergeWriteHandler的类继承AbstractMergeStrategy实现CellWriteHandler public class MergeLastWriteHandler extends Abst…

openssl3.2/test/certs - 073 - CA-PSS

文章目录 openssl3.2/test/certs - 073 - CA-PSS概述笔记setup073.shsetup073_sc1.shsetup073_sc2.shsetup073_sc3.shsetup073_sc4.shsetup073_sc5.shEND openssl3.2/test/certs - 073 - CA-PSS 概述 openssl3.2 - 官方demo学习 - test - certs 这个官方脚本里面学到东西了,…

微信小程序(十八)组件通信(父传子)

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.组件属性变量的定义 2.组件属性变量的默认状态 3.组件属性变量的传递方法 解释一下为什么是父传子&#xff0c;因为组件是页面的一部分&#xff0c;数据是从页面传递到组件的&#xff0c;所以是父传子&#xf…

防火墙的用户认证

目录 1. 认证的区别 2. 用户认证的分类 区别&#xff1a; 3. 上网用户认证的认证方式 3.1 置用户认证的位置&#xff1a; 3.1.1 认证域 创建认证域&#xff1a; 新建一个用户组&#xff1a; 新建一个用户 创建安全组 4. 认证策略 4.1 认证策略方式&#xff1a; 4.2…

MR image smoothing or filtering 既 FWHM与sigma之间的换算关系 fslmaths -s参数

这里写目录标题 FWHM核高斯核中的sigma是有一个换算公式&#xff1a;结果 大量的文献中都使用FWHM 作为单位&#xff0c;描述对MR等数据的平滑&#xff08;smoothing&#xff09;或者滤波&#xff08;filtering&#xff09;过程。FWHM 通常是指full width at half maximum的缩写…

yaml学习笔记

文章目录 yaml语言学习yaml 简介yaml 和json 区别基本语法数据类型YAML 对象YAML 数组锚点和引用纯量 参考文档 yaml语言学习 最近发现在学习k8s中各种配置文件 都是使用的yaml 这种格式, 包括 docker-compose.yaml 也都是用这个格式配置部署项目信息,我就了解了一下这个语法就…

字符串随机生成工具(开源)-Kimen(奇门)

由于最近笔者在开发数据脱敏相关功能&#xff0c;其中一类脱敏需求为能够按照指定的格式随机生成一个字符串来代替原有信息&#xff0c;数据看起来格式需要与原数据相同&#xff0c;如&#xff1a;电话号码&#xff0c;身份证号以及邮箱等。在网上搜索了下&#xff0c;发现没有…

【新书推荐】3.5 char类型

本节必须掌握的知识点&#xff1a; 示例十 代码分析 汇编解析 3.5.1 示例十 char类型是比较古怪的&#xff0c;int\short\long类型如果在使用时不指定signed还是unsigned时都默认是signed&#xff0c;但char不一样&#xff0c;编译器可以实现为带符号的&#xff0c;也可以实现…

洛谷B3621枚举元组

枚举元组 题目描述 n n n 元组是指由 n n n 个元素组成的序列。例如 ( 1 , 1 , 2 ) (1,1,2) (1,1,2) 是一个三元组、 ( 233 , 254 , 277 , 123 ) (233,254,277,123) (233,254,277,123) 是一个四元组。 给定 n n n 和 k k k&#xff0c;请按字典序输出全体 n n n 元组&am…

Flink实现数据写入MySQL

先准备一个文件里面数据有&#xff1a; a, 1547718199, 1000000 b, 1547718200, 1000000 c, 1547718201, 1000000 d, 1547718202, 1000000 e, 1547718203, 1000000 f, 1547718204, 1000000 g, 1547718205, 1000000 h, 1547718210, 1000000 i, 1547718210, 1000000 j, 154771821…

【QT】文件目录操作

目录 1 文件目录操作相关的类 2 实例概述 2.1 实例功能 2.2 信号发射者信息的获取 3 QCoreApplication类 4 QFile类 5 QFilelnfo类 6 QDir类 7 QTemporaryDir和QTemporaryFiIe 8 QFiIeSystemWatcher类 文件的读写是很多应用程序具有的功能&#xff0c;甚至某些应用程序就是围绕…

C语言赋值表达式中什么是左值和右值?数组名作为左右值时又具有怎样的意义?

一、问题 赋值表达式中可以分为左值和右值&#xff0c;那么什么是左值和右值&#xff1f;数组名做为左右值时又具有怎样的意义&#xff1f; 二、解答 在C语言中&#xff0c;左值和右值的概念对于理解赋值表达式以及程序的正确性非常重要&#xff1a; 1、左值 • 左值是一个…